Aracılığıyla paylaş


XML Toplu Yükleme Örnekleri (SQLXML 4.0)

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

Aşağıdaki örnekler, Microsoft SQL Server'daki XML Toplu Yükleme işlevselliğini göstermektedir. Her örnek bir XSD şeması ve eşdeğer XDR şeması sunar.

Bulk loader script (ValidateAndBulkload.vbs)

Microsoft Visual Basic Scripting Edition (VBScript) ile yazılmış aşağıdaki betik, XML DOM'a bir XML belgesi yükler; bunu bir şema karşısında doğrular; ve eğer belge geçerliyse, XML'i bir SQL Server tablosuna yüklemek için toplu yük çalıştırır. Bu beni, bu konuda daha sonra ona atıfta bulunan her bir örnekle birlikte kullanılabilir.

Uyarı

XML Toplu Yükleme, veri dosyasından herhangi bir içerik yüklenmezse uyarı veya hata vermez. Bu nedenle, toplu yükleme işlemi yapmadan önce XML veri dosyanızı doğrulamak iyi bir uygulamadır.

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  

A. XML'i bir tabloya toplu yükleme

Bu örnek, ConnectionString özelliğinde (MyServer) belirtilen SQL Server örneğine bir bağlantı kurar. Örnek ayrıca ErrorLogFile özelliğini de belirtir. Bu nedenle, hata çıktısı belirtilen dosyada ("C:\error.log") kaydedilir ve bu dosyayı farklı bir konuma da değiştirmeye karar verebilirsiniz. Ayrıca Execute yönteminin parametreleri olarak hem eşleme şema dosyası (SampleSchema.xml) hem de XML veri dosyası (SampleXMLData.xml) bulunmaktadır. Toplu yükleme yürütüldüğünde, tempdb veritabanında oluşturduğunuz Cust tablosu XML veri dosyasının içeriğine göre yeni kayıtlar içerecektir.

Örnek toplu yükü test etmek için

  1. Bu tabloyu oluşturun:

    CREATE TABLE Cust(CustomerID  int PRIMARY KEY,  
                      CompanyName varchar(20),  
                      City        varchar(20));  
    GO  
    
  2. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleSchema.xmlolarak kaydedin. Bu dosyaya aşağıdaki XSD şemasını ekleyin:

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleXMLData.xmlolarak kaydedin. Bu dosyaya aşağıdaki XML belgesini ekleyin:

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve ValidateAndBulkload.vbs olarak kaydedin. Bu dosyaya, bu konunun başında yukarıda verilen VBScript kodunu ekleyin. Bağlantı dizisini uygun sunucu adını sağlayacak şekilde değiştirin. Execute metoduna parametre olarak belirtilen dosyalar için uygun yolu belirtin.

  5. VBScript kodunu çalıştırın. XML Toplu Yükleme, XML'i Cust tablosuna yükler.

Bu eşdeğer XDR şemasıdır:

  
<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. XML verilerini birden fazla tabloya toplu yükleme

Bu örnekte, XML belgesi Müşteri<> ve <Sipariş> öğelerinden oluşur.

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

Bu örnek XML verilerini toplu olarak iki tabloya, Cust ve CustOrder'a yükler:

  • Cust(CustomerID, Şirket Adı, Şehir)

  • CustOrder(OrderID, CustomerID)

Aşağıdaki XSD şeması, bu tabloların XML görünümünü tanımlar. Şema, Müşteri<> ve <Sipariş> öğeleri arasındaki ebeveyn-çocuk ilişkisini belirtir.

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

XML Toplu Yükleme, Cust> ve CustOrder öğeleri arasında yukarıda< belirtilen birincil anahtar/yabancı anahtar ilişkisini kullanarak verileri her iki tabloya toplu olarak yükler.><

Örnek toplu yükü test etmek için

  1. tempdb veritabanında iki tablo oluşturun:

    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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleSchema.xmlolarak kaydedin. Bu örnekte verilen XSD şemasını dosyaya ekleyin.

  3. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleData.xmlolarak kaydedin. Bu örnekte daha önce verilen XML belgesini dosyaya ekleyin.

  4. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve ValidateAndBulkload.vbs olarak kaydedin. Bu dosyaya, bu konunun başında yukarıda verilen VBScript kodunu ekleyin. Bağlantı dizisini uygun sunucu ve veritabanı adını sağlayacak şekilde değiştirin. Execute metoduna parametre olarak belirtilen dosyalar için uygun yolu belirtin.

  5. Yukarıdaki VBScript kodunu çalıştırın. XML Toplu Yükleme, XML belgesini Cust ve CustOrder tablolarına yükler.

Bu eşdeğer XDR şemasıdır:

  
<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. Şemada zincir ilişkilerini kullanarak XML'i toplu yük etmek

Bu örnek, eşleme şemasında belirtilen M:N ilişkisinin, XML Toplu Yük tarafından M:N ilişkisini temsil eden bir tabloya veri yüklemek için nasıl kullanıldığını göstermektedir.

Örneğin, şu XSD şemasını göz önünde bulundurun:

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

Şema, bir <Ürün> alt elemanı olan bir< Order> öğesi belirtir. <Order> öğesi Ord tablosuna, <Ürün> öğesi ise veritabanındaki Ürün tablosuna eşlenir. Ürün<> öğesinde belirtilen zincir ilişkisi, OrderDetail tablosuyla temsil edilen bir M:N ilişkisini tanımlar. (Bir sipariş birçok ürünü içerebilir ve bir ürün birçok siparişe dahil edilebilir.)

Bu şema ile bir XML belgesini toplu yüklerken, kayıtlar Ord, Ürün ve OrderDetail tablolarına eklenir.

Çalışan bir örnek test etmek için

  1. Üç tablo oluşturun:

    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. Bu örnekte yukarıda verilen şemayı SampleSchema.xmlolarak kaydedin.

  3. Aşağıdaki örnek XML verilerini SampleXMLData.xmlolarak kaydedin:

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve ValidateAndBulkload.vbs olarak kaydedin. Bu dosyaya, bu konunun başında yukarıda verilen VBScript kodunu ekleyin. Bağlantı dizisini uygun sunucu ve veritabanı adını sağlayacak şekilde değiştirin. Bu örnek için kaynak kodundan aşağıdaki satırları yorumdan kaldırın.

    objBL.CheckConstraints = True  
    objBL.Transaction=True  
    
  5. VBScript kodunu çalıştırın. XML Toplu Yükleme, XML belgesini Ord ve Ürün tablolarına yükler.

D. Kimlik tipi sütunlarda toplu yükleme

Bu örnek, toplu yükün kimlik tipi sütunları nasıl yönettiğini göstermektedir. Örnekte, veri toplu olarak üç tabloya (Ord, Product ve OrderDetail) yüklenir.

Bu tablolarda:

  • Ord tablosunda OrderID, bir kimlik tipi sütunudur

  • Ürün tablosunda ProductID, bir kimlik tipi sütunudur.

  • OrderDetail'teki OrderID ve ProductID sütunları, Ord ve Ürün tablolarındaki karşılık gelen birincil anahtar sütunlarına atıfta bulunan yabancı anahtar sütunlarıdır.

Bu örnek için tablo şemaları aşağıda verilmiştir:

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

Bu XML Toplu Yük örneğinde, BulkLoad nesne modelinin KeepIdentity özelliği false olarak ayarlanmıştır. Bu nedenle, SQL Server Ürün ve Ord tablolarındaki ProductID ve OrderID sütunları için sırasıyla kimlik değerleri oluşturur (toplu yüklenecek belgelerde verilen değerler göz ardı edilir).

Bu durumda, XML Toplu Yükleme, tablolar arasındaki birincil anahtar/yabancı anahtar ilişkisini tanımlar. Toplu Yükleme önce birincil anahtarla tablolara kayıtlar ekler, ardından SQL Server tarafından üretilen kimlik değerini yabancı anahtar sütunlu tablolara yayar. Aşağıdaki örnekte, XML Toplu Yükleme verileri tablolara şu sırayla ekler:

  1. Ürün

  2. Ord

  3. Sipariş Detayı

    Uyarı

    Ürün ve Siparişler tablolarında üretilen kimlik değerlerinin yayılması için, işlem mantığı bu değerleri takip etmek için XML Toplu Yük gerektirir ve daha sonra OrderDetails tablosuna eklenebilir. Bunu yapmak için XML Toplu Yükleme ara tablolar oluşturur, bu tablolardaki verileri doldurur ve daha sonra bunları kaldırır.

Çalışan bir örnek test etmek için

  1. Şu tabloları oluşturun:

    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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleSchema.xmlolarak kaydedin. Bu XSD şemasını bu dosyaya ekleyin.

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleXMLData.xmlolarak kaydedin. Aşağıdaki XML belgesini ekleyin.

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve ValidateAndBulkload.vbs olarak kaydedin. Bu dosyaya aşağıdaki VBScript kodunu ekleyin. Bağlantı dizisini uygun sunucu ve veritabanı adını sağlayacak şekilde değiştirin. Execute yöntemine parametre olarak hizmet eden dosyalar için uygun yolu belirtin.

    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. VBScript kodunu çalıştırın. XML Toplu Yük, verileri uygun tablolara yükler.

E. Toplu yüklemeden önce tablo şemaları oluşturulması

XML Toplu Yükleme, toplu yüklemeden önce tablolar yoksa isteğe bağlı olarak üretilebilir. SQLXMLBulkLoad nesnesinin SchemaGen özelliğini TRUE olarak ayarlamak bunu yapar. Ayrıca, SGDropTables özelliğini TRUE olarak ayarlayarak mevcut tabloları kaldırıp yeniden oluşturmak için XML Toplu Yük talep edebilirsiniz. Aşağıdaki VBScript örneği bu özelliklerin kullanımını göstermektedir.

Ayrıca, bu örnek TRUE'ye iki ek özellik ekliyor:

  • Kontrol Kısıtlamaları. Bu özelliğin TRUE olarak ayarlanması, tablolara eklenen verinin tablolarda belirtilmiş kısıtlamaları ihlal etmemesini sağlar (bu durumda Cust ve CustOrder tabloları arasında belirtilen BIRINCIL ANAHTAR/YABANCI ANAHTAR kısıtlamaları). Bir kısıtlama ihlali varsa, toplu yük başarısız olur.

  • XMLFragment. Bu özellik TRUE olarak ayarlanmalıdır çünkü örnek XML belgesi (veri kaynağı) tek bir üst seviye eleman içermez (ve dolayısıyla bir parçadır).

İşte VBScript kodu:

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  

Çalışan bir örnek test etmek için

  1. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleSchema.xmlolarak kaydedin. Önceki örnekte sunulan "Chain relations in the schema to bulk load XML" dosyasına XSD şemasını ekleyin.

  2. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleXMLData.xmlolarak kaydedin. Önceki örnekte sunulan "Chain relations in the schema to bulk load XML" dosyasını dosyaya ekleyin. ROOT> öğesini <belgeden çıkarın (böylece bir parça haline getirin).

  3. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve ValidateAndBulkload.vbs olarak kaydedin. Bu dosyaya, bu örnekteki VBScript kodunu ekleyin. Bağlantı dizisini uygun sunucu ve veritabanı adını sağlayacak şekilde değiştirin. Execute metoduna parametre olarak belirtilen dosyalar için uygun yolu belirtin.

  4. VBScript kodunu çalıştırın. XML Toplu Yük, sağlanan eşleme şeması temelinde gerekli tabloları oluşturur ve içindeki verileri toplu yükler.

F. Bir dereden toplu yükleme

XML Toplu Yükleme nesne modelinin Execute yöntemi iki parametre alır. İlk parametre eşleme şeması dosyasıdır. İkinci parametre, veritabanına yüklenecek XML verilerini sağlar. XML verilerini XML Toplu Yük'ün Execute yöntemine aktarmanın iki yolu vardır:

  • Dosya adını parametre olarak belirtin.

  • XML verisini içeren bir akış geçirin.

Bu örnek, bir akıştan toplu yüklemenin nasıl yapılacağını gösterir.

VBScript, önce Northwind veritabanındaki Müşteriler tablosundan müşteri bilgilerini almak için bir SELECT ifadesi çalıştırır. FOR XML cümlesi (ELEMENTS seçeneğiyle) SELECT ifadesinde belirtildiğinden, sorgu şu biçimde eleman merkezli bir XML belgesi döndürür:

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

Script daha sonra XML'i bir akış olarak Execute metoduna ikinci parametresi olarak aktarır. Execute yöntemi verileri toplu olarak Cust tablosuna yükler.

Bu betik SchemaGen özelliğini TRUE, SGDropTables özelliğini TRUE olarak ayarladığı için, XML Toplu Yük belirlenen veritabanında Cust tablosunu oluşturur. (Eğer tablo zaten varsa, önce tabloyu kaldırır ve sonra yeniden oluşturur.)

İşte VBScript örneği:

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  

Aşağıdaki XSD eşleme şeması, tabloyu oluşturmak için gerekli bilgileri sağlar:

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

Bu, eşdeğer XDR şemasıdır:

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

Mevcut Bir Dosyada Akış Açmak

Ayrıca mevcut bir XML veri dosyasında bir akış açıp akışı Execute metoduna parametre olarak aktarabilirsiniz (dosya adını parametre olarak vermek yerine).

Bu, bir akışı parametre olarak aktarmanın Visual Basic'e bir örneğidir:

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  

Uygulamayı test etmek için, aşağıdaki XML belgesini bir dosyada (SampleData.xml) ve bu örnekte sunulan XSD şemasını kullanın:

Bu XML kaynak verisi (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>  

Bu eşdeğer XDR şemasıdır:

<?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. Taşma sütunlarında toplu yükleme

Eşleme şeması sql:overflow-field annotasyonu kullanarak bir taşma sütunu belirtirse, XML Toplu Yük kaynak belgeden tüketilmeyen tüm verileri bu sütuna kopyalar.

Şu XSD şemasını düşünün:

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

Şema, Cust tablosu için bir taşma sütununu (OverflowColumn) tanımlar. Sonuç olarak, her <Müşteri> öğesi için tüketilmeyen tüm XML verileri bu sütuna eklenir.

Uyarı

Tüm soyut öğeler ( özet="doğru" belirtilen öğeler) ve yasaklanmış tüm öznitelikler ( yagakı="doğru " belirtilen özellikler) XML Toplu Yük tarafından taşma olarak kabul edilir ve belirtilirse taşma sütununa eklenir. (Aksi takdirde, bunlar görmezden gelinir.)

Çalışan bir örnek test etmek için

  1. tempdb veritabanında iki tablo oluşturun:

    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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleSchema.xmlolarak kaydedin. Bu örnekte verilen XSD şemasını dosyaya ekleyin.

  3. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleXMLData.xmlolarak kaydedin. Dosyaya aşağıdaki XML belgesini ekleyin:

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve ValidateAndBulkload.vbs olarak kaydedin. Bu dosyaya aşağıdaki Microsoft Visual Basic Scripting Edition (VBScript) kodunu ekleyin. Bağlantı dizisini uygun sunucu ve veritabanı adını sağlayacak şekilde değiştirin. Execute metoduna parametre olarak belirtilen dosyalar için uygun yolu belirtin.

    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. VBScript kodunu çalıştırın.

Bu eşdeğer XDR şemasıdır:

<?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. İşlem modunda geçici dosyalar için dosya yolunun belirlenmesi

İşlem modunda toplu yükleme yaparken (yani Transaction özelliği TRUE'ya ayarlandığında), aşağıdaki koşullardan biri geçerli olduğunda TempFilePath özelliğini de ayarlamanız gerekir:

  • Uzak bir sunucuya toplu yükleme yapıyorsunuz.

  • İşlem modunda oluşturulan geçici dosyaları depolamak için alternatif bir yerel sürücü veya klasör (TEMP ortam değişkeni tarafından belirlenen yol dışında) kullanmak istersiniz.

Örneğin, aşağıdaki VBScript kodu, SampleXMLData.xml dosyasından veri veritabanı tablolarına işlem modunda toplu yükler. TempFilePath özelliği, işlem modunda üretilen geçici dosyaların yolunu ayarlamak için belirlenmiştir.

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  

Uyarı

Geçici dosya yolu, hedef SQL Server örneğinin hizmet hesabına ve toplu yükleme uygulamasını çalıştıran hesaba erişilebilen paylaşılan bir konum olmalıdır. Yerel bir sunucuda toplu yükleme yapmıyorsanız, geçici dosya yolu UNC yolu olmalı (örneğin \\servername\sharename).

Çalışan bir örnek test etmek için

  1. tempdb veritabanında bu tabloyu oluşturun:

    USE tempdb;  
    CREATE TABLE Cust (     CustomerID uniqueidentifier,   
          LastName  varchar(20));  
    GO  
    
  2. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleSchema.xmlolarak kaydedin. Dosyaya aşağıdaki XSD şemasını ekleyin:

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleXMLData.xmlolarak kaydedin. Dosyaya aşağıdaki XML belgesini ekleyin:

    <ROOT>  
    <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF"   
               LastName="Smith" />  
    </ROOT>  
    
  4. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve ValidateAndBulkload.vbs olarak kaydedin. Bu dosyaya aşağıdaki VBScript kodunu ekleyin. Bağlantı dizisini uygun sunucu ve veritabanı adını sağlayacak şekilde değiştirin. Execute metoduna parametre olarak belirtilen dosyalar için uygun yolu belirtin. Ayrıca TempFilePath özelliği için uygun yolu belirtin.

    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. VBScript kodunu çalıştırın.

    Şema, CustomerID değeri bir GUID olarak belirtildiğinde, örneğin braketleri ({ ve }) içeren bir GUID olarak belirtildiğinde, şema, CustomerID özniteliği için karşılık gelen sql:datatipini belirtmelidir:

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

    Güncellenmiş şema şöyle:

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

    sql:datatype sütun tipini uniqueidentifier olarak tanımlayan belirtildiğinde, toplu yükleme işlemi CustomerID değerinden destekleri ({ ve }) kaldırır ve ardından bu değeri sütuna ekler.

Bu eşdeğer XDR şemasıdır:

<?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. ConnectionCommand özelliğiyle mevcut bir veritabanı bağlantısını kullanmak

Mevcut bir ADO bağlantısını kullanarak XML'i toplu yükleyebilirsiniz. Bu, XML Toplu Yükleme, bir veri kaynağında gerçekleştirilecek birçok işlemden sadece biri ise faydalıdır.

ConnectionCommand özelliği, mevcut bir ADO bağlantısını bir ADO komut nesnesi kullanarak kullanmanızı sağlar. Bu, aşağıdaki Visual Basic örneğinde gösterilmiştir:

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  

Çalışan bir örnek test etmek için

  1. tempdb veritabanında iki tablo oluşturun:

    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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleSchema.xmlolarak kaydedin. Dosyaya aşağıdaki XSD şemasını ekleyin:

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleXMLData.xmlolarak kaydedin. Dosyaya aşağıdaki XML belgesini ekleyin:

    <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. Bir Visual Basic (Standard EXE) uygulaması ve önceki kodu oluşturun. Projeye şu referansları ekleyin:

    Microsoft XML BulkLoad for SQL Server 4.0 Type Library  
    Microsoft ActiveX Data objects 2.6 Library  
    
  5. Uygulamayı çalıştır.

Bu eşdeğer XDR şemasıdır:

<?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. xml Veri Tipi sütunlarında toplu yükleme

Eşleme şeması sql:datatype="xml" açıklamasını kullanarak bir xml veri tipi sütunu belirliyorsa, XML Toplu Yükleme, kaynak belgeden eşlenen alan için XML alt elemanlarını bu sütuna kopyalayabilir.

Aşağıdaki XSD şemasını ele alalım; bu şema, AdventureWorks örnek veritabanındaki Production.ProductModel tablosunun bir görünümünü eşlemektedir. Bu tabloda, xml veri tipinin CatalogDescription alanı, sql:field ve sql:datatype="xml" açıklamaları kullanılarak bir< Desc> öğesine eşlenir.

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

Çalışan bir örnek test etmek için

  1. AdventureWorks örnek veritabanının kurulmuş olduğundan emin olun.

  2. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleSchema.xmlolarak kaydedin. Yukarıdaki XSD şemasını kopyalayın, dosyaya yapıştırın ve kaydedin.

  3. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve SampleXMLData.xmlolarak kaydedin. Aşağıdaki XML belgesini kopyalayın, dosyaya yapıştırın ve önceki adımda kullanılan aynı klasöre kaydedin.

    <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. Tercih ettiğiniz metin veya XML düzenleyicide bir dosya oluşturun ve BulkloadXml.vbs olarak kaydedin. Aşağıdaki VBScript kodunu kopyalayın ve dosyaya yapıştırın. Önceki XML veri ve şema dosyaları için kullanılan aynı klasöre kaydedin.

    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. BulkloadXml.vbs betikini çalıştırın.