Udostępnij przez


Wytyczne i ograniczenia obciążenia luzem XML (SQLXML 4.0)

Za pomocą XML luzem obciążenia powinny być zaznajomieni z następujące wytyczne i ograniczenia:

  • Schematy wbudowane nie są obsługiwane.

    Jeśli schemat wbudowany w źródło schemat ignoruje XML zbiorczego ładowania dokumentu XML.Określić mapowanie schematu XML zbiorczego ładowania zewnętrznych danych XML.Mapowanie schematu na węźle nie można określić za pomocą xmlns = "x: schemat" atrybut.

  • Dokument XML jest zaznaczone dla właociwego formatowania, ale nie jest sprawdzana.

    XML luzem obciążenia sprawdza, czy jest dobrze sformułowany dokument XML — czyli zapewniające, że XML spełnia wymagania składni zalecenia XML 1.0 World Wide Web Consortium.Jeśli dokument nie jest poprawnie sformułowanym, obciążenia luzem XML anuluje przetwarzania i zwraca błąd.Jedynym wyjątkiem jest, gdy dokument jest fragment (na przykład dokument ma nie element główny pojedynczy), w którym to przypadek załadować luzem XML będzie załadować dokument.

    Ładowanie danych XML luzem nie sprawdza poprawności dokumentu w odniesieniu do danych XML lub DTD schematów, zdefiniowane lub wywoływane w pliku danych XML.Ponadto obciążenia luzem XML nie sprawdza poprawności schematem mapowania dostarczonego pliku danych XML.

  • Wszelkie informacje prologu XML jest ignorowana.

    Ładowanie danych XML luzem ignoruje wszystkie informacje przed i po <głównego> element dokumentu XML.Na przykład obciążenia luzem XML ignoruje wszelkie XML deklaracji, wewnętrzne DTD definicje, zewnętrznych DTD odwołania, komentarze i itd.

  • Jeśli schemat mapowanie, określający podstawowy klucz/relacji klucz obcy między dwoma tabelami (na przykład między klienta i CustOrder), tabela klucz podstawowy muszą być opisane najpierw w schemacie.Tabela z kolumna klucz obcy musi znajdować się później w schemacie.Przyczyną jest kolejność, w której tabele są identyfikowane w schemacie zamówienia, używany do ładowania 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.Kolumna IDKlienta w CustOrder jest kolumnę klucz obcy, odwołująca się do IDKlienta kolumny klucz podstawowy w tabela Nabywca.

    <?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ślać kolumny przepełnienie za pomocą sql:overflow-field adnotacji XML luzem obciążenia ignoruje wszelkie dane, który znajduje się w dokumencie XML, ale nie jest opisane w schemacie mapowania.

    Obciążenia luzem XML stosuje się schemat mapowanie, określony przez użytkownika przy każdym napotkaniu znane znaczniki w strumieniu danych XML.Ignoruje danych znajduje się w dokumencie XML, ale nie został opisany w schemacie.Na przykład, załóżmy, że masz schematu mapowania, która opisuje <klienta> elementu.Plik danych XML ma <AllCustomers> katalogu głównego znacznika (co nie jest opisane w schemacie), który ujmuje wszystkie <klienta> elementy:

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

    W takim przypadek ignoruje obciążenia luzem XML <AllCustomers> element i rozpoczyna się mapowanie na <klienta> elementu.Ładowanie danych XML luzem ignoruje elementy, które nie są opisane w schemacie, ale są obecne w dokumencie XML.

    Rozważenie innego źródło danych plik XML zawierający <zamówienia> elementów.Te elementy nie są opisane w schemacie mapowania:

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

    Ładowanie danych XML luzem ignoruje te <zamówienia> elementów.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 odniesienia są tłumaczone na ich odpowiedniki ciąg przed są przechowywane w bazie danych.

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

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

    Ładowanie danych XML luzem nie zachowa odwołań do obiekt.

  • Jeśli mapowanie schematu określa domyślną wartość atrybut źródło danych XML nie zawiera atrybut, obciążenia luzem XML używa wartości domyślnej.

    Następującego schematu XDR przykładowe przypisuje wartość domyślną dla DataZatrudnienia 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="2004-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 DataZatrudnienia od drugiego Brak atrybut <Klienci> elementu.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="2003-01-01" Salary="10000" />
      <Customers CustomerID="2" Salary="10000" />
    </ROOT>
    
  • sql:url-encode Adnotacji nie jest obsługiwany:

    Nie można określić adres URL w danych wejściowych danych XML i oczekują obciążenia luzem do odczytu danych z tej lokalizacji.

    Tworzone są tabele, które są identyfikowane w schemacie mapowania (bazy danych muszą istnieć).Jeśli jedna lub więcej tabel już istnieje w bazie danych, SGDropTables właściwość określa, czy istniejące tabele te są opuszczane i utworzony ponownie.

  • Jeśli określisz SchemaGen właściwość (na przykład SchemaGen = true), tabel, które są identyfikowane w schemacie mapowania są tworzone.Ale SchemaGen nie tworzy ograniczenia (np. ograniczenia klucza podstawowego klucz i zagranicznych) na 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 typ XML identyfikatora (oznacza to, że type="xsd:ID" dla XSD) oraz SGUseID właściwość jest zestaw na wartość True dla SchemaGen, nie tylko są klucze podstawowe utworzone z Identyfikatorem wpisany węzłów, ale podstawowy/klucz obcy relacji kluczy są tworzone z mapowania schematu relacje.

  • SchemaGennie używać faset schematu XSD i rozszerzeń do generowania relacyjnej SQL Server schematu.

  • Jeśli określisz SchemaGen właściwość (na przykład SchemaGen = true) Ładuj luzem, tylko tabele (i nie widoki nazwę udostępnionego) określone są aktualizowane.

  • SchemaGen tylko zapewnia podstawowe funkcje generowania schematu relacyjnego z adnotacjami XSD.Użytkownika należy ręcznie modyfikować tabele wygenerowane 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.Ograniczenie to może być przyczyną Transact-SQL błąd.

  • Gdy są zbiorcze ładowanie danych XML do bazy danych, musi istnieć co najmniej jeden atrybut lub element podrzędność elementu w schemacie mapowanie, który jest mapowany do kolumna bazy danych.

  • Jeśli wstawiasz wartości data przy użyciu obciążenia luzem XML wartości muszą być określone w (-)CCYY-MM-DD((+-)TZ) format.Jest to standardowy format XSD data.

  • Flagi niektórych właściwość nie są zgodne z innymi flagami właściwość.Na przykład ładowanie zbiorcze nie obsługuje Ignoreduplicatekeys=true wraz z Keepidentity=false.Gdy Keepidentity=false, ładowanie zbiorcze oczekuje serwera 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.