Udostępnij za pośrednictwem


Zasady i ograniczenia XML ładowanie zbiorcze (SQLXML 4.0)

Po użyciu XML ładowanie zbiorcze, należy zapoznać się z następującymi wskazówkami i ograniczenia:

  • Wbudowane schematy nie są obsługiwane.

    Jeśli masz schemat wbudowany w dokumencie XML urządzenie źródłowe XML ładowanie zbiorcze ignoruje tego schematu.Określić mapowanie schematu XML ładowanie zbiorcze zewnętrznych danych XML.Mapowanie schematu na węźle nie można określić przy użyciu xmlns = "x: schemat" atrybut.

  • Dokument XML jest sprawdzana pod kątem jest dobrze sformułowany, ale go nie jest sprawdzana.

    XML ładowanie zbiorcze sprawdza, czy jest dobrze sformułowany dokument XML — oznacza to, aby upewnić się, że kod XML jest zgodny z wymogami składni zalecenia konsorcjum World Wide Web, XML 1.0.Jeśli dokument nie jest poprawnie sformułowanym formatem, XML ładowanie zbiorcze anuluje przetwarzania i zwraca błąd.Jedynym wyjątkiem jest, gdy dokument jest fragment (na przykład dokument ma Brak elementu jednego katalogu głównego), w przeciwnym wypadku obciążenia zbiorcze XML będzie załadować dokument.

    ładowanie zbiorcze XML nie sprawdza poprawności dokumentu w odniesieniu do danych XML lub DTD schematów, która jest zdefiniowana lub w pliku danych XML odwoływać się do.Ponadto XML ładowanie zbiorcze nie sprawdza poprawności pliku danych XML schematem mapowania dostarczone.

  • Wszelkie informacje prologu XML jest ignorowana.

    XML ładowanie zbiorcze ignoruje wszystkie informacje przed i po <katalog główny> element dokumentu XML. Na przykład XML ładowanie zbiorcze ignoruje wszelkie XML deklaracji, wewnętrzne DTD definicje, zewnętrzne DTD odwołania, komentarze i tak dalej.

  • Jeśli schemat mapowania, który określa podstawowy klucz/relacji klucz obcy między dwoma tabelami (na przykład między klienta i CustOrder), w tabela klucz podstawowy musi być opisane najpierw w schemacie.Tabela z kolumna klucz obcy musi znajdować się w dalszej części schematu.Przyczyną jest fakt, że kolejność, w której tabele są identyfikowane w schemacie jest zamówienie, które można załadować je do bazy danych.For example, the following XDR schema will produce an error when it is used in XML Bulk Load because the <Order> element is described before the <Customer> element.W kolumnie IDKlienta w CustOrder jest kolumny klucz obcy, która odwołuje się identyfikator klienta podstawowy kolumna klucza w tabela Cust.

    <?xml version="1.0" ?>
    <Schema xmlns="urn:schemas-microsoft-com:xml-data" 
            xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"  
            xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
    
        <ElementType name="Order" sql:relation="CustOrder" >
          <AttributeType name="OrderID" />
          <AttributeType name="CustomerID" />
          <attribute type="OrderID" />
          <attribute type="CustomerID" />
        </ElementType>
    
       <ElementType name="CustomerID" dt:type="int" />
       <ElementType name="CompanyName" dt:type="string" />
       <ElementType name="City" dt:type="string" />
    
       <ElementType name="root" sql:is-constant="1">
          <element type="Customers" />
       </ElementType>
       <ElementType name="Customers" sql:relation="Cust" 
                         sql:overflow-field="OverflowColumn"  >
          <element type="CustomerID" sql:field="CustomerID" />
          <element type="CompanyName" sql:field="CompanyName" />
          <element type="City" sql:field="City" />
          <element type="Order" > 
               <sql:relationship
                   key-relation="Cust"
                    key="CustomerID"
                    foreign-key="CustomerID"
                    foreign-relation="CustOrder" />
          </element>
       </ElementType>
    </Schema>
    
  • Jeśli schemat nie określono kolumn przepełnienie przy użyciu sql:overflow-field Adnotacja XML ładowanie zbiorcze ignoruje wszystkie dane, które znajduje się w dokumencie XML, ale nie jest opisany w schemacie mapowania.

    XML ładowanie zbiorcze ma zastosowanie schematu mapowania, które zostały określone przez użytkownika za każdym razem, gdy wykryje znany tagów w strumieniu danych XML.Ignoruje dane, które znajduje się w dokumencie XML, ale nie jest opisany w schemacie.Przypuśćmy na przykład, że masz schematu mapowania, która opisuje <Odbiorcy> element. Plik danych XML ma <AllCustomers> katalog główny tag (która nie została opisana w schemacie), który obejmuje wszystkie <Odbiorcy> elementów:

    <AllCustomers>
      <Customer>...</Customer>
      <Customer>...</Customer>
       ...
    </AllCustomers>
    

    W takim przypadek ignoruje XML ładowanie zbiorcze <AllCustomers> element i rozpocznie się mapowanie na <Odbiorcy> element. XML ładowanie zbiorcze ignoruje elementy, które nie zostały opisane w schemacie, ale znajdują się w dokumencie XML.

    Należy wziąć pod uwagę innego urządzenie źródłowe danych pliku XML, który zawiera <Zamówienia> elementy. Te elementy nie są opisane w schemacie mapowania:

    <AllCustomers>
      <Customer>...</Customer>
        <Order> ... </Order>
        <Order> ... </Order>
         ...
      <Customer>...</Customer>
        <Order> ... </Order>
        <Order> ... </Order>
         ...
      ...
    </AllCustomers>
    

    XML ładowanie zbiorcze zignoruje te <Zamówienia> elementy. But if you use the sql:overflow-fieldannotation in the schema to identify a column as an overflow column, XML Bulk Load stores all unconsumed data in this column.

  • CDATA sekcje i obiekt odwołania zostały przetłumaczone na ich odpowiedniki ciąg przed są przechowywane w bazie danych.

    W tym przykładzie sekcja CDATA zawijania wartość <Miasto> element. XML Bulk Load extracts the string value ("NY") before it inserts the <City> element into the database.

        <City><![CDATA[NY]]> </City>
    

    XML ładowanie zbiorcze odwołania do obiektu nie zostaną zachowane.

  • Jeśli mapowanie schematu Określa domyślną wartość dla atrybut źródle danych XML nie zawiera tego atrybut, XML ładowanie zbiorcze używa wartości domyślnej.

    Następujące przykładowe schematu XDR przypisuje wartość domyślna ma HireDate atrybut:

    <?xml version="1.0" ?>
    <Schema xmlns="urn:schemas-microsoft-com:xml-data" 
            xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"  
            xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
       <ElementType name="root" sql:is-constant="1">
          <element type="Customers" />
       </ElementType>
    
       <ElementType name="Customers" sql:relation="Cust3" >
          <AttributeType name="CustomerID" dt:type="int"  />
          <AttributeType name="HireDate"  default="2000-01-01" />
          <AttributeType name="Salary"   />
    
          <attribute type="CustomerID" sql:field="CustomerID" />
          <attribute type="HireDate"   sql:field="HireDate"  />
          <attribute type="Salary"     sql:field="Salary"    />
       </ElementType>
    </Schema>
    

    W tym danych XML HireDate Brak atrybut drugiego <Klienci> element. When XML Bulk Load inserts the second <Customers> element into the database, it uses the default value that is specified in the schema.

    <ROOT>
      <Customers CustomerID="1" HireDate="1999-01-01" Salary="10000" />
      <Customers CustomerID="2" Salary="10000" />
    </ROOT>
    
  • The sql:url-encode annotation is not supported:

    Nie można określić adres URL w danych wejściowych danych XML i oczekiwać ładowanie zbiorcze odczytać danych z tej lokalizacji.

    Tworzone są tabele, które są identyfikowane w schemacie mapowania (Baza danych musi istnieć).Jeśli jeden lub więcej tabel już istnieje w bazie danych, SGDropTables Właściwość określa, czy te gotowe tabele mają być usunięty i utworzony ponownie.

  • Jeśli określisz SchemaGen właściwość (np. SchemaGen = true), tworzone są tabele, które są identyfikowane w schemacie mapowania. Ale SchemaGen nie powoduje utworzenia ograniczenia (takie jak klucz podstawowy / klucz obcy ograniczenia) dla tych tabel z jednym wyjątkiem: Jeśli węzłów XML, które tworzą klucz podstawowy w relacji są określane jako posiadające typu XML z IDENTYFIKATOREM (czyli type="xsd:ID" dla XSD) AND SGUseID Właściwość jest ustawiona na wartość true dla SchemaGen, a następnie nie są kluczami podstawowymi utworzyć jedynie przy użyciu IDENTYFIKATORA wpisany węzły, ale podstawowy klucz i obcego relacji kluczy są tworzone na podstawie mapowania schematu relacji.

  • SchemaGen nie użyto do wygenerowania relacyjnej aspekty schematu XSD i rozszerzenia SQL Server schemat.

  • Jeśli określisz SchemaGen właściwość (np. SchemaGen = true) na ładowanie zbiorcze, tylko tabel (i nie widoków udostępnianych nazwy) określone są aktualizowane.

  • SchemaGen tylko zapewnia podstawowe funkcje generowania relacyjnej schematu z adnotacjami XSD.Użytkownik powinien modyfikować wygenerowanych tabel ręcznie, w razie potrzeby.

  • Where more than relationship exists between tables,SchemaGen tries to create a single relationship that includes all the keys involved between the two tables.To ograniczenie może być przyczyną Transact-SQL Wystąpił błąd.

  • Gdy są zbiorcze ładowanie danych XML do bazy danych, musi istnieć co najmniej jeden element atrybut lub obiektu podrzędnego w schemacie mapowania, które jest mapowane do kolumna bazy danych.

  • Jeśli wstawiasz wartości data przy użyciu XML ładowanie zbiorcze wartości musi być określona w formacie (-)CCYY-MM-DD((+-)TZ).Jest to standardowy format XSD dla danej data.

  • Flagi niektóre właściwość nie są zgodne z innymi flagami właściwość.Na przykład nie obsługuje ładowanie zbiorcze Ignoreduplicatekeys=true wraz z Keepidentity=false. Kiedy Keepidentity=false, ładowanie zbiorcze oczekuje, że serwer do generowania wartości klucz. Tabele powinny mieć IDENTITY ograniczenie na klucz. The server will not generate duplicate keys, which means that there is no need for Ignoreduplicatekeys to be set to true.Ignoreduplicatekeys should be set to true only when uploading primary key values from the incoming data into a table that has rows and there is a potential for conflict of primary key values.