Bagikan melalui


Panduan dan Batasan Beban Massal XML (SQLXML 4.0)

Berlaku untuk: SQL ServerAzure SQL Database

Saat Anda menggunakan Pemuatan Massal XML, Anda harus terbiasa dengan panduan dan batasan berikut:

  • Skema sebaris tidak didukung.

    Jika Anda memiliki skema sebaris dalam dokumen XML sumber, Beban Massal XML mengabaikan skema tersebut. Anda menentukan skema pemetaan untuk Pemuatan Massal XML eksternal ke data XML. Anda tidak dapat menentukan skema pemetaan pada simpul dengan menggunakan atribut xmlns="x:schema" .

  • Dokumen XML diperiksa agar terbentuk dengan baik, tetapi tidak divalidasi.

    Beban Massal XML memeriksa dokumen XML untuk menentukan apakah itu terbentuk dengan baik, untuk memastikan bahwa XML sesuai dengan persyaratan sintaksis rekomendasi XML 1.0 Konsorsium World Wide Web. Jika dokumen tidak terbentuk dengan baik, Beban Massal XML membatalkan pemrosesan dan mengembalikan kesalahan. Satu-satunya pengecualian untuk ini adalah ketika dokumen adalah fragmen (misalnya, dokumen tidak memiliki elemen akar tunggal), dalam hal ini Beban Massal XML akan memuat dokumen.

    Beban Massal XML tidak memvalidasi dokumen sehubungan dengan skema XML-Data atau DTD apa pun yang ditentukan atau direferensikan dalam file data XML. Selain itu, Beban Massal XML tidak memvalidasi file data XML terhadap skema pemetaan yang disediakan.

  • Informasi prolog XML apa pun diabaikan.

    Pemuatan Massal XML mengabaikan semua informasi sebelum dan sesudah <elemen akar> dalam dokumen XML. Misalnya, Beban Massal XML mengabaikan deklarasi XML apa pun, definisi DTD internal, referensi DTD eksternal, komentar, dan sebagainya.

  • Jika Anda memiliki skema pemetaan yang menentukan hubungan kunci primer/kunci asing antara dua tabel (seperti antara Pelanggan dan CustOrder), tabel dengan kunci utama harus dijelaskan terlebih dahulu dalam skema. Tabel dengan kolom kunci asing harus muncul nanti dalam skema. Alasan untuk ini adalah bahwa urutan di mana tabel diidentifikasi dalam skema adalah urutan yang digunakan untuk memuatnya ke dalam database. Misalnya, skema XDR berikut akan menghasilkan kesalahan saat digunakan dalam Beban Massal XML karena <elemen Pesanan> dijelaskan sebelum< elemen Pelanggan>. Kolom CustomerID di CustOrder adalah kolom kunci asing yang mengacu pada kolom kunci utama CustomerID dalam tabel 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>  
    
  • Jika skema tidak menentukan kolom luapan dengan menggunakan anotasi bidang sql:overflow, Beban Massal XML mengabaikan data apa pun yang ada dalam dokumen XML tetapi tidak dijelaskan dalam skema pemetaan.

    Beban Massal XML menerapkan skema pemetaan yang telah Anda tentukan setiap kali menemukan tag yang diketahui dalam aliran data XML. Ini mengabaikan data yang ada dalam dokumen XML tetapi tidak dijelaskan dalam skema. Misalnya, asumsikan <Anda memiliki skema pemetaan yang menjelaskan elemen Pelanggan> . File data XML memiliki <tag akar AllCustomers> (yang tidak dijelaskan dalam skema) yang mencakup semua< elemen Pelanggan>:

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

    Dalam hal ini, Beban Massal XML mengabaikan <> dan mulai memetakan di . Muat Massal XML mengabaikan elemen yang tidak dijelaskan dalam skema tetapi ada dalam dokumen XML.

    Pertimbangkan file data sumber XML lain yang berisi <.> Elemen-elemen ini tidak dijelaskan dalam skema pemetaan:

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

    Beban Massal XML mengabaikan elemen Pesanan<>. Tetapi jika Anda menggunakan anotasi bidang sql:overflow dalam skema untuk mengidentifikasi kolom sebagai kolom luapan, Beban Massal XML menyimpan semua data yang tidak dikonsumsi di kolom ini.

  • Bagian CDATA dan referensi entitas diterjemahkan ke string yang setara sebelum disimpan dalam database.

    Dalam contoh ini, bagian CDATA membungkus nilai untuk <.> Beban Massal XML mengekstrak nilai string ("NY") sebelum menyisipkan <elemen Kota> ke dalam database.

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

    Beban Massal XML tidak mempertahankan referensi entitas.

  • Jika skema pemetaan menentukan nilai default untuk atribut dan data sumber XML tidak berisi atribut tersebut, Beban Massal XML menggunakan nilai default.

    Contoh skema XDR berikut menetapkan nilai default ke atribut HireDate :

    <?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>  
    

    Dalam data XML ini, atribut HireDate hilang dari elemen Pelanggan<>. Saat BEBAN Massal XML menyisipkan elemen Pelanggan<>ke dalam database, xml menggunakan nilai default yang ditentukan dalam skema.

    <ROOT>  
      <Customers CustomerID="1" HireDate="1999-01-01" Salary="10000" />  
      <Customers CustomerID="2" Salary="10000" />  
    </ROOT>  
    
  • Anotasi sql:url-encode tidak didukung:

    Anda tidak dapat menentukan URL dalam input data XML dan mengharapkan Pemuatan Massal untuk membaca data dari lokasi tersebut.

    Tabel yang diidentifikasi dalam skema pemetaan dibuat (database harus ada). Jika satu atau beberapa tabel sudah ada dalam database, properti SGDropTables menentukan apakah tabel yang sudah ada ini akan dihilangkan dan dibuat ulang.

  • Jika Anda menentukan properti SchemaGen (misalnya, SkemaGen = true), tabel yang diidentifikasi dalam skema pemetaan dibuat. Tetapi SkemaGen tidak membuat batasan apa pun (seperti batasan KUNCI PRIMER/KUNCI ASING) pada tabel ini dengan satu pengecualian: Jika simpul XML yang merupakan kunci utama dalam hubungan didefinisikan sebagai memiliki jenis ID XML (yaitu, type="xsd:ID" untuk XSD) DAN properti SGUseID diatur ke True untuk SchemaGen, maka tidak hanya kunci primer yang dibuat dari node yang diketik ID, tetapi hubungan kunci primer/kunci asing dibuat dari hubungan skema pemetaan.

  • SkemaGen tidak menggunakan faset dan ekstensi skema XSD untuk menghasilkan skema SQL Server relasional.

  • Jika Anda menentukan properti SchemaGen (misalnya, SchemaGen = true) pada Beban Massal, hanya tabel (dan bukan tampilan nama bersama) yang ditentukan yang diperbarui.

  • SkemaGen hanya menyediakan fungsionalitas dasar untuk menghasilkan skema relasional dari XSD yang diannotasi. Pengguna harus mengubah tabel yang dihasilkan secara manual, jika diperlukan.

  • Di mana ada lebih dari satu hubungan di antara tabel, SchemaGen mencoba membuat hubungan tunggal yang menyertakan semua kunci yang terlibat di antara kedua tabel. Batasan ini mungkin penyebab kesalahan Transact-SQL.

  • Saat Anda memuat data XML secara massal ke dalam database, setidaknya harus ada satu atribut atau elemen turunan dalam skema pemetaan yang dipetakan ke kolom database.

  • Jika Anda menyisipkan nilai tanggal dengan menggunakan Pemuatan Massal XML, nilai harus ditentukan dalam format (-)CCYY-MM-DD((+-)TZ). Ini adalah format XSD standar untuk tanggal tersebut.

  • Beberapa bendera properti tidak kompatibel dengan bendera properti lainnya. Misalnya, beban massal tidak mendukung Ignoreduplicatekeys=true bersama dengan Keepidentity=false. Ketika Keepidentity=false, beban massal mengharapkan server menghasilkan nilai kunci. Tabel harus memiliki batasan IDENTITAS pada kunci. Server tidak akan menghasilkan kunci duplikat, yang berarti tidak perlu ignoreduplicatekeys diatur ke true. Ignoreduplicatekeys harus diatur ke true hanya saat mengunggah nilai kunci utama dari data masuk ke dalam tabel yang memiliki baris dan ada potensi konflik nilai kunci primer.