Bagikan melalui


Contoh Pemuatan Massal XML (SQLXML 4.0)

Berlaku untuk:database SQL ServerAzure SQL

Contoh berikut mengilustrasikan fungsionalitas Muat Massal XML di Microsoft SQL Server. Setiap contoh menyediakan skema XSD dan skema XDR yang setara.

Skrip Pemuat Massal (ValidateAndBulkload.vbs)

Skrip berikut, yang ditulis dalam Microsoft Visual Basic Scripting Edition (VBScript), memuat dokumen XML ke dalam XML DOM; memvalidasinya terhadap skema; dan, jika dokumen valid, menjalankan beban massal XML untuk memuat XML ke dalam tabel SQL Server. Skrip ini dapat digunakan dengan masing-masing contoh individu yang merujuknya nanti dalam topik ini.

Catatan

Pemuatan Massal XML tidak memberikan peringatan atau kesalahan jika tidak ada konten yang diunggah dari file data. Oleh karena itu, adalah praktik yang baik untuk memvalidasi file data XML Anda sebelum menjalankan operasi pemuatan massal.

Dim FileValid  
  
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
objBL.ConnectionString = "provider=SQLOLEDB;data source=MyServer;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile = "c:\error.log"  
  
'Validate the data file prior to bulkload  
Dim sOutput   
sOutput = ValidateFile("SampleXMLData.xml", "", "SampleSchema.xml")  
WScript.Echo sOutput  
  
If FileValid Then  
   ' Check constraints and initiate transaction (if needed)  
   ' objBL.CheckConstraints = True  
   ' objBL.Transaction=True  
  'Execute XML bulkload using file.  
  objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
  set objBL=Nothing  
End If  
  
Function ValidateFile(strXmlFile,strUrn,strXsdFile)  
  
   ' Create a schema cache and add SampleSchema.xml to it.  
   Dim xs, fso, sAppPath  
   Set fso = CreateObject("Scripting.FileSystemObject")   
   Set xs = CreateObject("MSXML2.XMLSchemaCache.6.0")  
   sAppPath = fso.GetFolder(".")   
   xs.Add strUrn, sAppPath & "\" & strXsdFile  
  
   ' Create an XML DOMDocument object.  
   Dim xd   
   Set xd = CreateObject("MSXML2.DOMDocument.6.0")  
  
   ' Assign the schema cache to the DOM document.  
   ' schemas collection.  
   Set xd.schemas = xs  
  
   ' Load XML document as DOM document.  
   xd.async = False  
   xd.Load sAppPath & "\" & strXmlFile  
  
   ' Return validation results in message to the user.  
   If xd.parseError.errorCode <> 0 Then  
        ValidateFile = "Validation failed on " & _  
             strXmlFile & vbCrLf & _  
             "=======" & vbCrLf & _  
             "Reason: " & xd.parseError.reason & _  
             vbCrLf & "Source: " & _  
             xd.parseError.srcText & _  
             vbCrLf & "Line: " & _  
             xd.parseError.Line & vbCrLf  
             FileValid = False  
    Else  
        ValidateFile = "Validation succeeded for " & _  
             strXmlFile & vbCrLf & _  
             "========" & _  
             vbCrLf & "Contents to be bulkloaded" & vbCrLf  
             FileValid = True  
    End If  
End Function  

J. Memuat XML secara massal dalam tabel

Contoh ini membuat koneksi ke instans SQL Server yang ditentukan dalam properti ConnectionString (MyServer). Contoh ini juga menentukan properti ErrorLogFile. Oleh karena itu, output kesalahan disimpan dalam file yang ditentukan ("C:\error.log"), yang mungkin juga Anda putuskan untuk mengubah ke lokasi yang berbeda. Perhatikan juga bahwa metode Execute memiliki sebagai parameternya baik file skema pemetaan (SampleSchema.xml) dan file data XML (SampleXMLData.xml). Saat beban massal dijalankan, tabel Cust yang telah Anda buat dalam database tempdb akan berisi rekaman baru berdasarkan konten file data XML.

Untuk menguji sampel beban massal

  1. Buat tabel ini:

    CREATE TABLE Cust(CustomerID  int PRIMARY KEY,  
                      CompanyName varchar(20),  
                      City        varchar(20));  
    GO  
    
  2. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleSchema.xml. Ke file ini, tambahkan skema XSD berikut:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
       <xsd:element name="ROOT" sql:is-constant="1" >  
         <xsd:complexType>  
           <xsd:sequence>  
             <xsd:element name="Customers" sql:relation="Cust" maxOccurs="unbounded">  
               <xsd:complexType>  
                 <xsd:sequence>  
                   <xsd:element name="CustomerID"  type="xsd:integer" />  
                   <xsd:element name="CompanyName" type="xsd:string" />  
                   <xsd:element name="City"        type="xsd:string" />  
                 </xsd:sequence>  
               </xsd:complexType>  
             </xsd:element>  
           </xsd:sequence>  
          </xsd:complexType>  
         </xsd:element>  
    </xsd:schema>  
    
  3. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleXMLData.xml. Ke file ini, tambahkan dokumen XML berikut:

    <ROOT>  
      <Customers>  
        <CustomerID>1111</CustomerID>  
        <CompanyName>Sean Chai</CompanyName>  
        <City>New York</City>  
      </Customers>  
      <Customers>  
        <CustomerID>1112</CustomerID>  
        <CompanyName>Tom Johnston</CompanyName>  
         <City>Los Angeles</City>  
      </Customers>  
      <Customers>  
        <CustomerID>1113</CustomerID>  
        <CompanyName>Institute of Art</CompanyName>  
        <City>Chicago</City>  
      </Customers>  
    </ROOT>  
    
  4. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai ValidateAndBulkload.vbs. Ke file ini, tambahkan kode VBScript yang disediakan di atas di awal topik ini. Ubah string koneksi untuk memberikan nama server yang sesuai. Tentukan jalur yang sesuai untuk file yang ditentukan sebagai parameter ke metode Jalankan.

  5. Jalankan kode VBScript. Pemuatan Massal XML memuat XML ke dalam tabel Cust.

Ini adalah skema XDR yang setara:

  
<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="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" >  
      <element type="CustomerID"  sql:field="CustomerID" />  
      <element type="CompanyName" sql:field="CompanyName" />  
      <element type="City"        sql:field="City" />  
  
   </ElementType>  
</Schema>  

B. Memuat data XML secara massal dalam beberapa tabel

Dalam contoh ini, dokumen XML terdiri dari <elemen Pelanggan> dan <Pesanan> .

<ROOT>  
  <Customers>  
    <CustomerID>1111</CustomerID>  
    <CompanyName>Sean Chai</CompanyName>  
    <City>NY</City>  
    <Order OrderID="1" />  
    <Order OrderID="2" />  
  </Customers>  
  <Customers>  
    <CustomerID>1112</CustomerID>  
    <CompanyName>Tom Johnston</CompanyName>  
     <City>LA</City>    
    <Order OrderID="3" />  
  </Customers>  
  <Customers>  
    <CustomerID>1113</CustomerID>  
    <CompanyName>Institute of Art</CompanyName>  
    <Order OrderID="4" />  
  </Customers>  
</ROOT>  

Contoh ini memuat data XML secara massal ke dalam dua tabel, Cust dan CustOrder:

  • Cust(CustomerID, CompanyName, City)

  • CustOrder(OrderID, CustomerID)

Skema XSD berikut menentukan tampilan XML tabel ini. Skema menentukan hubungan induk-anak antara <elemen Pelanggan> dan <Pesanan> .

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:annotation>  
    <xsd:appinfo>  
      <sql:relationship name="CustCustOrder"  
          parent="Cust"  
          parent-key="CustomerID"  
          child="CustOrder"  
          child-key="CustomerID" />  
    </xsd:appinfo>  
  </xsd:annotation>  
  <xsd:element name="ROOT" sql:is-constant="1" >  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="Customers" sql:relation="Cust" >  
          <xsd:complexType>  
            <xsd:sequence>  
              <xsd:element name="CustomerID"  type="xsd:integer" />  
              <xsd:element name="CompanyName" type="xsd:string" />  
              <xsd:element name="City"        type="xsd:string" />  
              <xsd:element name="Order"   
                          sql:relation="CustOrder"  
                          sql:relationship="CustCustOrder" >  
                <xsd:complexType>  
                  <xsd:attribute name="OrderID" type="xsd:integer" />  
                </xsd:complexType>  
              </xsd:element>  
             </xsd:sequence>  
          </xsd:complexType>  
        </xsd:element>  
      </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Pemuatan Massal XML menggunakan hubungan kunci primer/kunci asing yang ditentukan di atas antara <elemen Cust> dan <CustOrder> untuk memuat data secara massal ke dalam kedua tabel.

Untuk menguji sampel beban massal

  1. Buat dua tabel dalam database tempdb :

    USE tempdb;  
    CREATE TABLE Cust(  
           CustomerID  int PRIMARY KEY,  
           CompanyName varchar(20),  
           City        varchar(20));  
    CREATE TABLE CustOrder(        OrderID     int PRIMARY KEY,   
            CustomerID int FOREIGN KEY REFERENCES Cust(CustomerID));  
    
  2. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleSchema.xml. Tambahkan skema XSD yang disediakan dalam contoh ini ke file.

  3. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleData.xml. Tambahkan dokumen XML yang disediakan sebelumnya dalam contoh ini ke file.

  4. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai ValidateAndBulkload.vbs. Ke file ini, tambahkan kode VBScript yang disediakan di atas di awal topik ini. Ubah string koneksi untuk menyediakan nama server dan database yang sesuai. Tentukan jalur yang sesuai untuk file yang ditentukan sebagai parameter ke metode Jalankan.

  5. Jalankan kode VBScript di atas. Pemuatan Massal XML memuat dokumen XML ke dalam tabel Cust dan CustOrder.

Ini adalah skema XDR yang setara:

  
<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="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" >  
      <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>  
    <ElementType name="Order" sql:relation="CustOrder" >  
      <AttributeType name="OrderID" />  
      <AttributeType name="CustomerID" />  
      <attribute type="OrderID" />  
      <attribute type="CustomerID" />  
    </ElementType>  
</Schema>  

C. Menggunakan hubungan rantai dalam skema untuk memuat XML secara massal

Contoh ini menggambarkan bagaimana hubungan M:N yang ditentukan dalam skema pemetaan digunakan oleh Beban Massal XML untuk memuat data dalam tabel yang mewakili hubungan M:N.

Misalnya, pertimbangkan skema XSD ini:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="OrderOD"  
          parent="Ord"  
          parent-key="OrderID"  
          child="OrderDetail"  
          child-key="OrderID" />  
  
    <sql:relationship name="ODProduct"  
          parent="OrderDetail"  
          parent-key="ProductID"  
          child="Product"  
          child-key="ProductID"   
          inverse="true"/>  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="ROOT" sql:is-constant="1" >  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="Order"   
                     sql:relation="Ord"   
                     sql:key-fields="OrderID" >  
          <xsd:complexType>  
            <xsd:sequence>  
             <xsd:element name="Product"  
                          sql:relation="Product"   
                          sql:key-fields="ProductID"  
                          sql:relationship="OrderOD ODProduct">  
               <xsd:complexType>  
                 <xsd:attribute name="ProductID" type="xsd:int" />  
                 <xsd:attribute name="ProductName" type="xsd:string" />  
               </xsd:complexType>  
             </xsd:element>  
           </xsd:sequence>  
           <xsd:attribute name="OrderID"   type="xsd:integer" />   
           <xsd:attribute name="CustomerID"   type="xsd:string" />  
         </xsd:complexType>  
       </xsd:element>  
      </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Skema menentukan <elemen Pesanan> dengan <elemen anak Produk> . Elemen <Order> memetakan ke tabel Ord dan <elemen Product> memetakan ke tabel Produk dalam database. Hubungan rantai yang ditentukan pada <elemen Produk> mengidentifikasi hubungan M:N yang diwakili oleh tabel OrderDetail. (Pesanan dapat mencakup banyak produk, dan produk dapat disertakan dalam banyak pesanan.)

Saat Anda memuat dokumen XML secara massal dengan skema ini, rekaman ditambahkan ke tabel Ord, Product, dan OrderDetail.

Untuk menguji sampel yang berfungsi

  1. Buat tiga tabel:

    CREATE TABLE Ord (  
             OrderID     int  PRIMARY KEY,  
             CustomerID  varchar(5));  
    GO  
    CREATE TABLE Product (  
             ProductID   int PRIMARY KEY,  
             ProductName varchar(20));  
    GO  
    CREATE TABLE OrderDetail (  
           OrderID     int FOREIGN KEY REFERENCES Ord(OrderID),  
           ProductID   int FOREIGN KEY REFERENCES Product(ProductID),  
                       CONSTRAINT OD_key PRIMARY KEY (OrderID, ProductID));  
    GO  
    
  2. Simpan skema yang disediakan di atas dalam contoh ini sebagai SampleSchema.xml.

  3. Simpan contoh data XML berikut sebagai SampleXMLData.xml:

    <ROOT>    
      <Order OrderID="1" CustomerID="ALFKI">  
        <Product ProductID="1" ProductName="Chai" />  
        <Product ProductID="2" ProductName="Chang" />  
      </Order>  
      <Order OrderID="2" CustomerID="ANATR">  
        <Product ProductID="3" ProductName="Aniseed Syrup" />  
        <Product ProductID="4" ProductName="Gumbo Mix" />  
      </Order>  
    </ROOT>  
    
  4. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai ValidateAndBulkload.vbs. Ke file ini, tambahkan kode VBScript yang disediakan di atas di awal topik ini. Ubah string koneksi untuk menyediakan nama server dan database yang sesuai. Hapus komentar baris berikut dari kode sumber untuk contoh ini.

    objBL.CheckConstraints = True  
    objBL.Transaction=True  
    
  5. Jalankan kode VBScript. Pemuatan Massal XML memuat dokumen XML ke dalam tabel Ord dan Produk.

D. Pemuatan massal dalam kolom jenis identitas

Contoh ini menggambarkan bagaimana beban massal menangani kolom jenis identitas. Dalam contoh, data dimuat secara massal ke dalam tiga tabel (Ord, Product, dan OrderDetail).

Dalam tabel ini:

  • OrderID dalam tabel Ord adalah kolom jenis identitas

  • ProductID dalam tabel Produk adalah kolom jenis identitas.

  • Kolom OrderID dan ProductID di OrderDetail adalah kolom kunci asing yang mengacu pada kolom kunci utama terkait dalam tabel Ord dan Product.

Berikut ini adalah skema tabel untuk contoh ini:

Ord (OrderID, CustomerID)  
Product (ProductID, ProductName)  
OrderDetail (OrderID, ProductID)  

Dalam contoh Pemuatan Massal XML ini, properti KeepIdentity dari model objek BulkLoad diatur ke false. Oleh karena itu, SQL Server menghasilkan nilai identitas untuk kolom ProductID dan OrderID dalam tabel Produk dan Ord, masing-masing (nilai apa pun yang disediakan dalam dokumen yang akan dimuat secara massal diabaikan).

Dalam hal ini, Beban Massal XML mengidentifikasi hubungan kunci primer/kunci asing di antara tabel. Muat Massal terlebih dahulu menyisipkan rekaman dalam tabel dengan kunci primer, lalu menyebarluaskan nilai identitas yang dihasilkan oleh SQL Server ke tabel dengan kolom kunci asing. Dalam contoh berikut, Pemuatan Massal XML menyisipkan data dalam tabel dalam urutan ini:

  1. Produk

  2. Ord

  3. OrderDetail

    Catatan

    Untuk menyebarluaskan nilai identitas yang dihasilkan dalam tabel Produk dan Pesanan, logika pemrosesan memerlukan Beban Massal XML untuk melacak nilai-nilai ini untuk penyisipan nanti ke dalam tabel OrderDetails. Untuk melakukannya, Beban Massal XML membuat tabel perantara, mengisi data dalam tabel ini, dan kemudian menghapusnya.

Untuk menguji sampel yang berfungsi

  1. Buat tabel ini:

    CREATE TABLE Ord (  
             OrderID     int identity(1,1)  PRIMARY KEY,  
             CustomerID  varchar(5));  
    GO  
    CREATE TABLE Product (  
             ProductID   int identity(1,1) PRIMARY KEY,  
             ProductName varchar(20));  
    GO  
    CREATE TABLE OrderDetail (  
           OrderID     int FOREIGN KEY REFERENCES Ord(OrderID),  
           ProductID   int FOREIGN KEY REFERENCES Product(ProductID),  
                       CONSTRAINT OD_key PRIMARY KEY (OrderID, ProductID));  
    GO  
    
  2. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleSchema.xml. Tambahkan skema XSD ini ke file ini.

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
     <xsd:annotation>  
       <xsd:appinfo>  
        <sql:relationship name="OrderOD"  
              parent="Ord"  
              parent-key="OrderID"  
              child="OrderDetail"  
              child-key="OrderID" />  
        <sql:relationship name="ODProduct"  
              parent="OrderDetail"  
              parent-key="ProductID"  
              child="Product"  
              child-key="ProductID"   
              inverse="true"/>  
       </xsd:appinfo>  
     </xsd:annotation>  
    
      <xsd:element name="Order" sql:relation="Ord"   
                                sql:key-fields="OrderID" >  
       <xsd:complexType>  
         <xsd:sequence>  
            <xsd:element name="Product" sql:relation="Product"   
                         sql:key-fields="ProductID"  
                         sql:relationship="OrderOD ODProduct">  
              <xsd:complexType>  
                 <xsd:attribute name="ProductID" type="xsd:int" />  
                 <xsd:attribute name="ProductName" type="xsd:string" />  
              </xsd:complexType>  
            </xsd:element>  
         </xsd:sequence>  
            <xsd:attribute name="OrderID"   type="xsd:integer" />   
            <xsd:attribute name="CustomerID"   type="xsd:string" />  
        </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    
  3. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleXMLData.xml. Tambahkan dokumen XML berikut.

    <ROOT>    
      <Order OrderID="11" CustomerID="ALFKI">  
        <Product ProductID="11" ProductName="Chai" />  
        <Product ProductID="22" ProductName="Chang" />  
      </Order>  
      <Order OrderID="22" CustomerID="ANATR">  
         <Product ProductID="33" ProductName="Aniseed Syrup" />  
        <Product ProductID="44" ProductName="Gumbo Mix" />  
      </Order>  
    </ROOT>  
    
  4. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai ValidateAndBulkload.vbs. Ke file ini, tambahkan kode VBScript berikut. Ubah string koneksi untuk menyediakan nama server dan database yang sesuai. Tentukan jalur yang sesuai untuk file yang berfungsi sebagai parameter ke metode Jalankan .

    Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
    objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
    objBL.ErrorLogFile = "C:\error.log"  
    objBL.CheckConstraints = True  
    objBL.Transaction = False  
    objBL.KeepIdentity = False  
    objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
    Set objBL = Nothing  
    MsgBox "Done."  
    
  5. Jalankan kode VBScript. Pemuatan Massal XML akan memuat data ke dalam tabel yang sesuai.

E. Membuat skema tabel sebelum memuat secara massal

Pemuatan Massal XML dapat secara opsional menghasilkan tabel jika tidak ada sebelum pemuatan massal. Mengatur properti SchemaGen dari objek SQLXMLBulkLoad ke TRUE melakukan ini. Anda juga dapat secara opsional meminta Pemuatan Massal XML untuk menghilangkan tabel yang ada dan membuatnya kembali dengan mengatur properti SGDropTables ke TRUE. Contoh VBScript berikut mengilustrasikan penggunaan properti ini.

Selain itu, contoh ini menetapkan dua properti tambahan ke TRUE:

  • CheckConstraints. Mengatur properti ini ke TRUE memastikan bahwa data yang dimasukkan ke dalam tabel tidak melanggar batasan apa pun yang telah ditentukan pada tabel (dalam hal ini batasan KUNCI PRIMER/KUNCI ASING yang ditentukan antara tabel Cust dan CustOrder). Jika ada pelanggaran batasan, beban massal gagal.

  • XMLFragment. Properti ini harus diatur ke TRUE karena sampel dokumen XML (sumber data) tidak berisi elemen tingkat atas tunggal (dan dengan demikian merupakan fragmen).

Ini adalah kode VBScript:

Dim objBL   
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile = "c:\error.log"  
  
objBL.CheckConstraints=true  
objBL.XMLFragment = True  
objBL.SchemaGen = True  
objBL.SGDropTables = True  
  
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
Set objBL = Nothing  

Untuk menguji sampel yang berfungsi

  1. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleSchema.xml. Tambahkan skema XSD yang disediakan dalam contoh sebelumnya, "Menggunakan hubungan rantai dalam skema untuk memuat XML secara massal", ke file.

  2. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleXMLData.xml. Tambahkan dokumen XML yang disediakan dalam contoh sebelumnya, "Menggunakan hubungan rantai dalam skema untuk memuat XML secara massal", ke file. <Hapus elemen ROOT> dari dokumen (untuk menjadikannya fragmen).

  3. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai ValidateAndBulkload.vbs. Ke file ini, tambahkan kode VBScript dalam contoh ini. Ubah string koneksi untuk menyediakan nama server dan database yang sesuai. Tentukan jalur yang sesuai untuk file yang ditentukan sebagai parameter ke metode Jalankan.

  4. Jalankan kode VBScript. Pemuatan Massal XML membuat tabel yang diperlukan berdasarkan skema pemetaan yang disediakan dan memuat data secara massal di dalamnya.

F. Pemuatan massal dari aliran

Metode Eksekusi model objek Muat Massal XML mengambil dua parameter. Parameter pertama adalah file skema pemetaan. Parameter kedua menyediakan data XML yang akan dimuat dalam database. Ada dua cara untuk meneruskan data XML ke metode Jalankan Pemuatan Massal XML:

  • Tentukan nama file sebagai parameter .

  • Meneruskan aliran yang berisi data XML.

Contoh ini menggambarkan cara memuat secara massal dari aliran.

VBScript pertama kali menjalankan pernyataan SELECT untuk mengambil informasi pelanggan dari tabel Pelanggan di database Northwind. Karena klausa FOR XML ditentukan (dengan opsi ELEMENTS) dalam pernyataan SELECT, kueri mengembalikan dokumen XML yang ber sentris elemen dari formulir ini:

<Customer>  
  <CustomerID>..</CustomerID>  
  <CompanyName>..</CompanyName>  
  <City>..</City>  
</Customer>  
...  

Skrip kemudian meneruskan XML sebagai aliran ke metode Execute sebagai parameter kedua. Metode Jalankan secara massal memuat data ke dalam tabel Cust.

Karena skrip ini mengatur properti SchemaGen ke properti TRUE dan SGDropTables ke TRUE, Beban Massal XML membuat tabel Kust dalam database yang ditentukan. (Jika tabel sudah ada, tabel tersebut terlebih dahulu menghilangkan tabel lalu membuatnya kembali.)

Ini adalah contoh VBScript:

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
Set objCmd = CreateObject("ADODB.Command")  
Set objConn = CreateObject("ADODB.Connection")  
Set objStrmOut = CreateObject ("ADODB.Stream")  
  
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile     = "c:\error.log"  
objBL.CheckConstraints = True  
objBL.SchemaGen        = True  
objBL.SGDropTables     = True  
objBL.XMLFragment      = True  
' Open a connection to the instance of SQL Server to get the source data.  
  
objConn.Open "provider=SQLOLEDB;server=(local);database=tempdb;integrated security=SSPI"  
Set objCmd.ActiveConnection = objConn  
objCmd.CommandText = "SELECT CustomerID, CompanyName, City FROM Customers FOR XML AUTO, ELEMENTS"  
  
' Open the return stream and execute the command.  
Const adCRLF = -1  
Const adExecuteStream = 1024  
objStrmOut.Open  
objStrmOut.LineSeparator = adCRLF  
objCmd.Properties("Output Stream").Value = objStrmOut  
objCmd.Execute , , adExecuteStream  
objStrmOut.Position = 0  
  
' Execute bulk load. Read source XML data from the stream.  
objBL.Execute "SampleSchema.xml", objStrmOut  
  
Set objBL = Nothing  

Skema pemetaan XSD berikut ini menyediakan informasi yang diperlukan untuk membuat tabel:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:element name="ROOT" sql:is-constant="true" >  
  <xsd:complexType>  
    <xsd:sequence>  
      <xsd:element ref="Customers"/>  
    </xsd:sequence>  
  </xsd:complexType>  
</xsd:element>  
<xsd:element name="Customers" sql:relation="Cust" >  
  <xsd:complexType>  
    <xsd:sequence>  
      <xsd:element name="CustomerID"  
                   type="xsd:string"  
                   sql:datatype="nvarchar(5)"/>  
      <xsd:element name="CompanyName"  
                   type="xsd:string"  
                   sql:datatype="nvarchar(40)"/>  
      <xsd:element name="City"  
                   type="xsd:string"  
                   sql:datatype="nvarchar(40)"/>  
    </xsd:sequence>  
  </xsd:complexType>  
</xsd:element>  
</xsd:schema>  

Ini adalah skema XDR yang setara:

<?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="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"  >  
      <element type="CustomerID" sql:field="CustomerID" />  
      <element type="CompanyName" sql:field="CompanyName" />  
      <element type="City" sql:field="City" />  
    </ElementType>  
</Schema>  

Membuka Aliran pada File yang Ada

Anda juga dapat membuka aliran pada file data XML yang ada dan meneruskan aliran sebagai parameter ke metode Jalankan (alih-alih meneruskan nama file sebagai parameter).

Ini adalah contoh Visual Basic untuk meneruskan aliran sebagai parameter:

Private Sub Form_Load()  
Dim objBL As New SQLXMLBulkLoad  
Dim objStrm As New ADODB.Stream  
Dim objFileSystem As New Scripting.FileSystemObject  
Dim objFile As Scripting.TextStream  
  
MsgBox "Begin BulkLoad..."  
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile = "c:\error.log"  
objBL.CheckConstraints = True  
objBL.SchemaGen = True  
objBL.SGDropTables = True  
' Here again a stream is specified that contains the source data   
' (instead of the file name). But this is just an illustration.  
' Usually this is useful if you have an XML data   
' stream that is created by some other means that you want to bulk   
' load. This example starts with an XML text file, so it may not be the   
' best to use a stream (you can specify the file name directly).  
' Here you could have specified the file name itself.   
Set objFile = objFileSystem.OpenTextFile("c:\SampleData.xml")  
objStrm.Open  
objStrm.WriteText objFile.ReadAll  
objStrm.Position = 0  
objBL.Execute "c:\SampleSchema.xml", objStrm  
  
Set objBL = Nothing  
MsgBox "Done."  
End Sub  

Untuk menguji aplikasi, gunakan dokumen XML berikut dalam file (SampleData.xml) dan skema XSD yang disediakan dalam contoh ini:

Ini adalah data sumber XML (SampleData.xml):

<ROOT>  
  <Customers>  
    <CustomerID>1111</CustomerID>  
    <CompanyName>Hanari Carnes</CompanyName>  
    <City>NY</City>  
    <Order OrderID="1" />  
    <Order OrderID="2" />  
  </Customers>  
  
  <Customers>  
    <CustomerID>1112</CustomerID>  
    <CompanyName>Toms Spezialitten</CompanyName>  
     <City>LA</City>  
    <Order OrderID="3" />  
  </Customers>  
  <Customers>  
    <CustomerID>1113</CustomerID>  
    <CompanyName>Victuailles en stock</CompanyName>  
    <Order CustomerID= "4444" OrderID="4" />  
</Customers>  
</ROOT>  

Ini adalah skema XDR yang setara:

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

G. Pemuatan massal dalam kolom luapan

Jika skema pemetaan menentukan kolom luapan dengan menggunakan anotasi sql:overflow-field , Beban Massal XML menyalin semua data yang tidak dikonsumsi dari dokumen sumber ke dalam kolom ini.

Pertimbangkan skema XSD ini:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="CustCustOrder"  
          parent="Cust"  
          parent-key="CustomerID"  
          child="CustOrder"  
          child-key="CustomerID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  <xsd:element name="Customers" sql:relation="Cust"  
                                sql:overflow-field="OverflowColumn" >  
   <xsd:complexType>  
     <xsd:sequence>  
       <xsd:element name="CustomerID"  type="xsd:integer" />  
       <xsd:element name="CompanyName" type="xsd:string" />  
       <xsd:element name="City"        type="xsd:string" />  
       <xsd:element name="Order"   
                          sql:relation="CustOrder"  
                          sql:relationship="CustCustOrder" >  
         <xsd:complexType>  
          <xsd:attribute name="OrderID" type="xsd:integer" />  
          <xsd:attribute name="CustomerID" type="xsd:integer" />  
         </xsd:complexType>  
       </xsd:element>  
     </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Skema mengidentifikasi kolom luapan (OverflowColumn) untuk tabel Kust. Akibatnya, semua data XML yang tidak dikonsumsi untuk setiap <elemen Pelanggan> ditambahkan ke kolom ini.

Catatan

Semua elemen abstrak (elemen yang abstract="true" ditentukan) dan semua atribut yang dilarang (atribut yang dilarang="true" ditentukan) dianggap luapan oleh Beban Massal XML dan ditambahkan ke kolom luapan, jika ditentukan. (Jika tidak, mereka diabaikan.)

Untuk menguji sampel yang berfungsi

  1. Buat dua tabel dalam database tempdb :

    USE tempdb;  
    CREATE TABLE Cust (  
                  CustomerID     int         PRIMARY KEY,  
                  CompanyName    varchar(20) NOT NULL,  
                  City           varchar(20) DEFAULT 'Seattle',  
                  OverflowColumn nvarchar(200));  
    GO  
    CREATE TABLE CustOrder (  
                  OrderID    int PRIMARY KEY,  
                  CustomerID int FOREIGN KEY   
                                 REFERENCES Cust(CustomerID));  
    GO  
    
  2. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleSchema.xml. Tambahkan skema XSD yang disediakan dalam contoh ini ke file.

  3. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleXMLData.xml. Tambahkan dokumen XML berikut ke file:

    <ROOT>  
      <Customers>  
        <CustomerID>1111</CustomerID>  
        <CompanyName>Hanari Carnes</CompanyName>  
        <City><![CDATA[NY]]> </City>  
        <Junk>garbage in overflow</Junk>  
        <Order OrderID="1" />  
        <Order OrderID="2" />  
      </Customers>  
    
      <Customers>  
        <CustomerID>1112</CustomerID>  
        <CompanyName>Toms Spezialitten</CompanyName>  
         <![CDATA[LA]]>   
        <!-- <xyz><address>111 Maple, Seattle</address></xyz>   -->  
        <Order OrderID="3" />  
      </Customers>  
      <Customers>  
        <CustomerID>1113</CustomerID>  
        <CompanyName>Victuailles en stock</CompanyName>  
        <Order OrderID="4" />  
    </Customers>  
    </ROOT>  
    
  4. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai ValidateAndBulkload.vbs. Ke file ini, tambahkan kode Microsoft Visual Basic Scripting Edition (VBScript) berikut. Ubah string koneksi untuk menyediakan nama server dan database yang sesuai. Tentukan jalur yang sesuai untuk file yang ditentukan sebagai parameter ke metode Jalankan.

    set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
    objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
    objBL.ErrorLogFile = "c:\error.log"  
    objBL.CheckConstraints = True  
    objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
    set objBL=Nothing  
    
  5. Jalankan kode VBScript.

Ini adalah skema XDR yang setara:

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

H. Menentukan jalur file untuk file sementara dalam mode transaksi

Ketika Anda memuat secara massal dalam mode transaksi (yaitu, ketika properti Transaksi diatur ke TRUE), Anda juga harus mengatur properti TempFilePath ketika salah satu kondisi berikut ini benar:

  • Anda memuat secara massal ke server jarak jauh.

  • Anda ingin menggunakan drive atau folder lokal alternatif (satu selain jalur yang ditentukan oleh variabel lingkungan TEMP) untuk menyimpan file sementara yang dibuat dalam mode transaksi.

Misalnya, kode VBScript berikut memuat data secara massal dari file SampleXMLData.xml ke dalam tabel database dalam mode transaksi. Properti TempFilePath ditentukan untuk mengatur jalur untuk file sementara yang dihasilkan dalam mode transaksi.

set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile = "c:\error.log"  
objBL.CheckConstraints = True  
objBL.Transaction=True  
objBL.TempFilePath="\\Server\MyDir"  
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
set objBL=Nothing  

Catatan

Jalur file sementara harus merupakan lokasi bersama yang dapat diakses oleh akun layanan instans target SQL Server dan ke akun yang menjalankan aplikasi beban massal. Kecuali Anda memuat secara massal di server lokal, jalur file sementara harus berupa jalur UNC (seperti \\servername\sharename).

Untuk menguji sampel yang berfungsi

  1. Buat tabel ini dalam database tempdb :

    USE tempdb;  
    CREATE TABLE Cust (     CustomerID uniqueidentifier,   
          LastName  varchar(20));  
    GO  
    
  2. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleSchema.xml. Tambahkan skema XSD berikut ke file:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
      <xsd:element name="ROOT" sql:is-constant="true" >  
        <xsd:complexType>  
          <xsd:sequence>  
            <xsd:element ref="Customers" />  
          </xsd:sequence>  
        </xsd:complexType>  
      </xsd:element>  
    
      <xsd:element name="Customers" sql:relation="Cust" >  
       <xsd:complexType>  
         <xsd:attribute name="CustomerID"  type="xsd:string" />  
         <xsd:attribute name="LastName" type="xsd:string" />  
       </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    
  3. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleXMLData.xml. Tambahkan dokumen XML berikut ke file:

    <ROOT>  
    <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF"   
               LastName="Smith" />  
    </ROOT>  
    
  4. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai ValidateAndBulkload.vbs. Ke file ini, tambahkan kode VBScript berikut. Ubah string koneksi untuk menyediakan nama server dan database yang sesuai. Tentukan jalur yang sesuai untuk file yang ditentukan sebagai parameter ke metode Jalankan. Tentukan juga jalur yang sesuai untuk properti TempFilePath.

    set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
    objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
    objBL.ErrorLogFile = "c:\error.log"  
    objBL.CheckConstraints = True  
    objBL.Transaction=True  
    objBL.TempFilePath="\\server\folder"  
    objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
    set objBL=Nothing  
    
  5. Jalankan kode VBScript.

    Skema harus menentukan sql:datatype yang sesuai untuk atribut CustomerID ketika nilai untuk CustomerID ditentukan sebagai GUID yang menyertakan kurung kurawal ({ dan }), seperti:

    <ROOT>  
    <Customers CustomerID="{6F9619FF-8B86-D011-B42D-00C04FC964FF}"   
               LastName="Smith" />  
    </ROOT>  
    

    Ini adalah skema yang diperbarui:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
      <xsd:element name="ROOT" sql:is-constant="true" >  
        <xsd:complexType>  
          <xsd:sequence>  
            <xsd:element ref="Customers" />  
          </xsd:sequence>  
        </xsd:complexType>  
      </xsd:element>  
    
      <xsd:element name="Customers" sql:relation="Cust" >  
       <xsd:complexType>  
         <xsd:attribute name="CustomerID"  type="xsd:string"   
                        sql:datatype="uniqueidentifier" />  
         <xsd:attribute name="LastName" type="xsd:string" />  
       </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    

    Ketika sql:datatype ditentukan mengidentifikasi jenis kolom sebagai pengidentifikasi unik, operasi pemuatan massal menghapus kurung kurawal ({ dan }) dari nilai CustomerID sebelum memasukkannya ke dalam kolom.

Ini adalah skema XDR yang setara:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:dt="urn:schemas-microsoft-com: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="Cust" >  
  <AttributeType name="CustomerID"  sql:datatype="uniqueidentifier" />  
  <AttributeType name="LastName"   />  
  
  <attribute type="CustomerID" />  
  <attribute type="LastName"   />  
</ElementType>  
</Schema>  

i. Menggunakan koneksi database yang sudah ada dengan properti ConnectionCommand

Anda dapat menggunakan koneksi ADO yang ada untuk memuat XML secara massal. Ini berguna jika Pemuatan Massal XML hanyalah salah satu dari banyak operasi yang akan dilakukan pada sumber data.

Properti ConnectionCommand memungkinkan Anda menggunakan koneksi ADO yang ada dengan menggunakan objek perintah ADO. Ini diilustrasikan dalam contoh Visual Basic berikut:

Private Sub Form_Load()  
Dim objBL As New SQLXMLBulkLoad4  
Dim objCmd As New ADODB.Command  
Dim objConn As New ADODB.Connection  
  
'Open a connection to an instance of SQL Server.  
objConn.Open "provider=SQLOLEDB;data source=(local);database=tempdb;integrated security=SSPI"  
'Ask the Command object to use the connection just established.  
Set objCmd.ActiveConnection = objConn  
  
'Tell Bulk Load to use the active command object that is using the Connection obj.  
objBL.ConnectionCommand = objCmd  
objBL.ErrorLogFile = "c:\error.log"  
objBL.CheckConstraints = True  
'The Transaction property must be set to True if you use ConnectionCommand.  
objBL.Transaction = True  
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
Set objBL = Nothing  
End Sub  

Untuk menguji sampel yang berfungsi

  1. Buat dua tabel dalam database tempdb :

    USE tempdb;  
    CREATE TABLE Cust(  
                   CustomerID   varchar(5) PRIMARY KEY,  
                   CompanyName  varchar(30),  
                   City         varchar(20));  
    GO  
    CREATE TABLE CustOrder(  
                   CustomerID  varchar(5) references Cust (CustomerID),  
                   OrderID     varchar(5) PRIMARY KEY);  
    GO  
    
  2. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleSchema.xml. Tambahkan skema XSD berikut ke file:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
    <xsd:annotation>  
      <xsd:appinfo>  
        <sql:relationship name="CustCustOrder"  
              parent="Cust"  
              parent-key="CustomerID"  
              child="CustOrder"  
              child-key="CustomerID" />  
      </xsd:appinfo>  
    </xsd:annotation>  
      <xsd:element name="ROOT" sql:is-constant="true" >  
        <xsd:complexType>  
          <xsd:sequence>  
            <xsd:element ref="Customers" />  
          </xsd:sequence>  
        </xsd:complexType>  
      </xsd:element>  
      <xsd:element name="Customers" sql:relation="Cust" >  
       <xsd:complexType>  
         <xsd:sequence>  
           <xsd:element name="CustomerID"  type="xsd:integer" />  
           <xsd:element name="CompanyName" type="xsd:string" />  
           <xsd:element name="City"        type="xsd:string" />  
           <xsd:element name="Order"   
                              sql:relation="CustOrder"  
                              sql:relationship="CustCustOrder" >  
             <xsd:complexType>  
              <xsd:attribute name="OrderID" type="xsd:integer" />  
              <xsd:attribute name="CustomerID" type="xsd:integer" />  
             </xsd:complexType>  
           </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    
  3. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleXMLData.xml. Tambahkan dokumen XML berikut ke file:

    <ROOT>  
      <Customers>  
        <CustomerID>1111</CustomerID>  
        <CompanyName>Hanari Carnes</CompanyName>  
        <City>NY</City>  
        <Order OrderID="1" />  
        <Order OrderID="2" />  
      </Customers>  
    
      <Customers>  
        <CustomerID>1112</CustomerID>  
        <CompanyName>Toms Spezialitten</CompanyName>  
         <City>LA</City>  
        <Order OrderID="3" />  
      </Customers>  
      <Customers>  
        <CustomerID>1113</CustomerID>  
        <CompanyName>Victuailles en stock</CompanyName>  
        <Order OrderID="4" />  
    </Customers>  
    </ROOT>  
    
  4. Buat aplikasi Visual Basic (Standard EXE) dan kode sebelumnya. Tambahkan referensi ini ke proyek:

    Microsoft XML BulkLoad for SQL Server 4.0 Type Library  
    Microsoft ActiveX Data objects 2.6 Library  
    
  5. Jalankan aplikasi.

Ini adalah skema XDR yang setara:

<?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="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"  >  
      <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>  
    <ElementType name="Order" sql:relation="CustOrder" >  
      <AttributeType name="OrderID" />  
      <AttributeType name="CustomerID" />  
      <attribute type="OrderID" />  
      <attribute type="CustomerID" />  
    </ElementType>  
</Schema>  

j. Pemuatan massal di kolom Tipe Data xml

Jika skema pemetaan menentukan kolom tipe data xml dengan menggunakan anotasi sql:datatype="xml" , Beban Massal XML dapat menyalin elemen anak XML untuk bidang yang dipetakan dari dokumen sumber ke dalam kolom ini.

Pertimbangkan skema XSD berikut, yang memetakan tampilan tabel Production.ProductModel dalam database sampel AdventureWorks. Dalam tabel ini, bidang CatalogDescription dari jenis data xml dipetakan ke <elemen Desc> menggunakan anotasi sql:field dan sql:datatype="xml ".

<?xml version="1.0" encoding="utf-8" ?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
           xmlns:sql="urn:schemas-microsoft-com:mapping-schema"  
           xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">   
  <xsd:element name="ProductModel"  sql:relation="Production.ProductModel" >  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="Name" type="xs:string"></xsd:element>  
        <xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">  
        <xsd:complexType>  
          <xsd:sequence>  
            <xsd:element name="ProductDescription">  
              <xsd:complexType>  
                <xsd:sequence>  
                  <xsd:element name="Summary" type="xs:anyType"/>  
                </xsd:sequence>  
              </xsd:complexType>  
            </xsd:element>  
          </xsd:sequence>  
        </xsd:complexType>  
        </xsd:element>   
     </xsd:sequence>  
     <xsd:attribute name="ProductModelID" sql:field="ProductModelID" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Untuk menguji sampel yang berfungsi

  1. Verifikasi bahwa database sampel AdventureWorks diinstal.

  2. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleSchema.xml. Salin skema XSD di atas dan tempelkan ke dalam file dan simpan.

  3. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai SampleXMLData.xml. Salin dokumen XML berikut ini dan tempelkan ke dalam file dan simpan di folder yang sama seperti yang digunakan untuk langkah sebelumnya.

    <ProductModel ProductModelID="2005">  
        <Name>Mountain-100 (2005 model)</Name>  
        <Desc><?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?>  
            <p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
                  xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"   
                  xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures"   
                  xmlns:html="http://www.w3.org/1999/xhtml"   
                  xmlns="">  
                <p1:Summary>  
                    <html:p>Our top-of-the-line competition mountain bike.   
          Performance-enhancing options include the innovative HL Frame,   
          super-smooth front suspension, and traction for all terrain.  
                            </html:p>  
                </p1:Summary>  
                <p1:Manufacturer>  
                    <p1:Name>AdventureWorks</p1:Name>  
                    <p1:Copyright>2002-2005</p1:Copyright>  
                    <p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>  
                </p1:Manufacturer>  
                <p1:Features>These are the product highlights.   
                     <wm:Warranty>  
                        <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>  
                        <wm:Description>parts and labor</wm:Description>  
                    </wm:Warranty><wm:Maintenance>  
                        <wm:NoOfYears>10 years</wm:NoOfYears>  
                        <wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description>  
                    </wm:Maintenance><wf:wheel>High performance wheels.</wf:wheel><wf:saddle>  
                        <html:i>Anatomic design</html:i> and made from durable leather for a full-day of riding in comfort.</wf:saddle><wf:pedal>  
                        <html:b>Top-of-the-line</html:b> clipless pedals with adjustable tension.</wf:pedal><wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter   
          and wall-thickness required of a premium mountain frame.   
          The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame><wf:crankset> Triple crankset; aluminum crank arm; flawless shifting. </wf:crankset></p1:Features>  
                <!-- add one or more of these elements... one for each specific product in this product model -->  
                <p1:Picture>  
                    <p1:Angle>front</p1:Angle>  
                    <p1:Size>small</p1:Size>  
                    <p1:ProductPhotoID>118</p1:ProductPhotoID>  
                </p1:Picture>  
                <!-- add any tags in <specifications> -->  
                <p1:Specifications> These are the product specifications.  
                       <Material>Aluminum Alloy</Material><Color>Available in most colors</Color><ProductLine>Mountain bike</ProductLine><Style>Unisex</Style><RiderExperience>Advanced to Professional riders</RiderExperience></p1:Specifications>  
            </p1:ProductDescription>  
        </Desc>  
    </ProductModel>  
    
  4. Buat file di teks atau editor XML pilihan Anda, dan simpan sebagai BulkloadXml.vbs. Salin kode VBScript berikut dan tempelkan ke dalam file. Simpan di folder yang sama seperti yang digunakan untuk data XML dan file skema sebelumnya.

    set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
    objBL.ConnectionString = "provider=SQLOLEDB;data source=MyServer;database=AdventureWorks;integrated security=SSPI"  
    
    Dim fso, sAppPath  
    Set fso = CreateObject("Scripting.FileSystemObject")   
    sAppPath = fso.GetFolder(".")   
    
    objBL.ErrorLogFile = sAppPath & "\error.log"  
    
    'Execute XML bulkload using file.  
    objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
    set objBL=Nothing  
    
  5. Jalankan skrip BulkloadXml.vbs.