共用方式為


XML 大量載入範例 (SQLXML 4.0)

適用於:SQL Server Azure SQL 資料庫

下列範例說明 MICROSOFT SQL Server 中的 XML 大量載入功能。 每個範例都會提供 XSD 架構及其相等的 XDR 架構。

大量載入器腳本 (ValidateAndBulkload.vbs)

下列腳本,以 Microsoft Visual Basic Scripting Edition (VBScript) 撰寫,會將 XML 檔載入 XML DOM;根據架構驗證它;如果檔有效,則會執行 XML 大量載入,以將 XML 載入 SQL Server 數據表。 此腳本可與本主題稍後參考的每個個別範例搭配使用。

注意

如果沒有從數據檔上傳任何內容,XML 大量載入不會擲回警告或錯誤。 因此,在執行大量載入作業之前,先驗證 XML 數據檔是個不錯的作法。

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

此範例會建立與 ConnectionString 屬性 (MyServer) 中所指定之 SQL Server 實例的連接。 此範例也會指定 ErrorLogFile 屬性。 因此,錯誤輸出會儲存在指定的檔案中(“C:\error.log”),您也可以決定變更為不同的位置。 另請注意,Execute 方法具有對應架構檔案 (SampleSchema.xml) 和 XML 數據檔 (SampleXMLData.xml) 等參數。 大量載入執行時,您在tempdb資料庫中建立的 Cust 資料表會根據 XML 資料檔案的內容包含新的記錄。

測試範例大量負載

  1. 建立下述資料表:

    CREATE TABLE Cust(CustomerID  int PRIMARY KEY,  
                      CompanyName varchar(20),  
                      City        varchar(20));  
    GO  
    
  2. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleSchema.xml。 在此檔案中,新增下列 XSD 架構:

    <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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleXMLData.xml。 在此檔案中,新增下列 XML 檔:

    <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. 在慣用的文字或 XML 編輯器中建立檔案,並將它儲存為 ValidateAndBulkload.vbs。 在此檔案中,新增本主題開頭上方提供的 VBScript 程序代碼。 修改 連接字串 以提供適當的伺服器名稱。 為 Execute 方法的參數所指定的檔案指定適當的路徑。

  5. 執行 VBScript 程序代碼。 XML 大量載入會將 XML 載入 Cust 資料表。

這是對等的 XDR 架構:

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

在此範例中,XML 檔是由 Customer><Order> 元素所組成。<

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

此範例會將 XML 數據大量載入兩個數據表 :CustCustOrder

  • Cust(CustomerID,CompanyName,City)

  • CustOrder(OrderID, CustomerID)

下列 XSD 架構會定義這些資料表的 XML 檢視。 架構會指定 Customer><Order> 元素之間的<父子關聯性。

<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 大量載入會使用上述 Cust> 和< CustOrder> 元素之間<指定的主鍵/外鍵關聯性,將數據大量載入這兩個數據表。

測試範例大量負載

  1. 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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleSchema.xml。 將此範例中提供的 XSD 架構新增至 檔案。

  3. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleData.xml。 將本範例稍早提供的 XML 檔新增至 檔案。

  4. 在慣用的文字或 XML 編輯器中建立檔案,並將它儲存為 ValidateAndBulkload.vbs。 在此檔案中,新增本主題開頭上方提供的 VBScript 程序代碼。 修改 連接字串 以提供適當的伺服器和資料庫名稱。 為 Execute 方法的參數所指定的檔案指定適當的路徑。

  5. 執行上述 VBScript 程序代碼。 XML 大量載入會將 XML 檔載入 Cust 和 CustOrder 資料表。

這是對等的 XDR 架構:

  
<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. 在架構中使用鏈結關聯性大量載入 XML

這個範例說明 XML 大量載入如何使用對應架構中指定的 M:N 關聯性,在代表 M:N 關聯性的數據表中載入數據。

例如,請考慮此 XSD 架構:

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

架構會<指定具有 Product> 子元素的 <Order> 元素。 <Order> 元素會對應至 Ord 數據表,<而 Product> 元素會對應至資料庫中的 Product 數據表。 Product> 元素上<指定的鏈結關聯性會識別 OrderDetail 數據表所代表的 M:N 關聯性。 (訂單可以包含許多產品,而產品可以包含在許多訂單中。

當您使用這個架構大量載入 XML 檔時,會將記錄新增至 Ord、Product 和 OrderDetail 數據表。

測試工作範例

  1. 建立三個資料表:

    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. 將上述範例中提供的架構儲存為SampleSchema.xml。

  3. 將下列範例 XML 資料儲存為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. 在慣用的文字或 XML 編輯器中建立檔案,並將它儲存為 ValidateAndBulkload.vbs。 在此檔案中,新增本主題開頭上方提供的 VBScript 程序代碼。 修改 連接字串 以提供適當的伺服器和資料庫名稱。 從此範例的原始程式碼取消批注下列幾行。

    objBL.CheckConstraints = True  
    objBL.Transaction=True  
    
  5. 執行 VBScript 程序代碼。 XML 大量載入會將 XML 檔載入 Ord 和 Product 資料表。

D. 在識別類型數據行中大量載入

此範例說明大量載入如何處理識別類型數據行。 在此範例中,數據會大量載入三個數據表(Ord、Product 和 OrderDetail)。

在這些資料表中:

  • Ord 資料表中的 OrderID 是識別類型數據行

  • Product 資料表中的 ProductID 是識別類型數據行。

  • OrderDetail 中的 OrderID 和 ProductID 數據行是參考 Ord 和 Product 數據表中對應主鍵數據行的外鍵數據行。

以下是此範例的數據表架構:

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

在此 XML 大量載入範例中,BulkLoad 物件模型的 KeepIdentity 屬性會設定為 false。 因此,SQL Server 會分別針對 Product 和 Ord 數據表中的 ProductID 和 OrderID 資料行產生識別值(會忽略要大量載入之檔中提供的任何值)。

在此情況下,XML 大量載入會識別數據表之間的主鍵/外鍵關聯性。 大量載入會先使用主鍵在數據表中插入記錄,然後將 SQL Server 所產生的識別值傳播至具有外鍵數據行的數據表。 在下列範例中,XML 大量載入會依下列順序在資料表中插入資料:

  1. Products

  2. 曼特爾

  3. OrderDetail

    注意

    為了傳播 Products 和 Orders 數據表中產生的識別值,處理邏輯需要 XML 大量載入來追蹤這些值,以便稍後插入 OrderDetails 數據表。 若要這樣做,XML 大量載入會建立中繼數據表、填入這些數據表中的數據,稍後再移除它們。

測試工作範例

  1. 建立這些資料表:

    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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleSchema.xml。 將此 XSD 架構新增至此檔案。

    <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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleXMLData.xml。 新增下列 XML 檔。

    <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. 在慣用的文字或 XML 編輯器中建立檔案,並將它儲存為 ValidateAndBulkload.vbs。 在此檔案中,新增下列 VBScript 程序代碼。 修改 連接字串 以提供適當的伺服器和資料庫名稱。 為 Execute 方法做為參數的檔案指定適當的路徑。

    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 程序代碼。 XML 大量載入會將數據載入適當的數據表。

E. 大量載入之前產生數據表架構

如果數據表在大量載入之前不存在,XML 大量載入可以選擇性地產生數據表。 將 SQLXMLBulkLoad 物件的 SchemaGen 屬性設定為 TRUE 會執行此動作。 您也可以選擇性地要求 XML 大量載入卸除任何現有的數據表,並將 SGDropTables 屬性設定為 TRUE 以重新建立它們。 下列 VBScript 範例說明使用這些屬性。

此外,此範例會將兩個額外的屬性設定為 TRUE:

  • CheckConstraints。 將此屬性設定為 TRUE 可確保插入數據表中的數據不會違反數據表上指定的任何條件約束(在此情況下,Cust 和 CustOrder 資料表之間指定的 PRIMARY KEY/FOREIGN KEY 條件約束)。 如果發生條件約束違規,大量載入就會失敗。

  • XMLFragment。 此屬性必須設定為 TRUE,因為範例 XML 檔 (資料源) 不包含單一最上層元素 (因此 是片段)。

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

測試工作範例

  1. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleSchema.xml。 將先前範例中提供的 XSD 架構新增至檔案「使用架構中的鏈結關聯性大量載入 XML」。

  2. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleXMLData.xml。 將先前範例中提供的 XML 檔新增至檔案「在架構中使用鏈結關聯性大量載入 XML」。 <從檔案中移除 ROOT> 元素(使其成為片段)。

  3. 在慣用的文字或 XML 編輯器中建立檔案,並將它儲存為 ValidateAndBulkload.vbs。 在此檔案中,在此範例中新增 VBScript 程序代碼。 修改 連接字串 以提供適當的伺服器和資料庫名稱。 為 Execute 方法的參數所指定的檔案指定適當的路徑。

  4. 執行 VBScript 程序代碼。 XML 大量載入會根據提供的對應架構建立必要的數據表,並大量載入其中的數據。

F. 從數據流大量載入

XML 大量載入物件的 Execute 方法會採用兩個參數。 第一個參數是對應架構檔案。 第二個參數會提供要載入資料庫中的 XML 數據。 有兩種方式可將 XML 數據傳遞至 XML 大量載入的 Execute 方法:

  • 將檔名指定為 參數。

  • 傳遞包含 XML 資料的數據流。

此範例說明如何從數據流大量載入。

VBScript 會先執行 SELECT 語句,以從 Northwind 資料庫中的 Customers 數據表擷取客戶資訊。 由於在 SELECT 語句中指定 FOR XML 子句(具有 ELEMENTS 選項),因此查詢會傳回以元素為中心的 XML 檔,格式如下:

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

然後,腳本會將 XML 當做數據流傳遞至 Execute 方法做為其第二個參數。 Execute 方法會將數據大量載入 Cust 數據表。

由於此腳本會將 SchemaGen 屬性設定為 TRUE,並將 SGDropTables 屬性設定為 TRUE,因此 XML 大量載入會在指定的資料庫中建立 Cust 數據表。 (如果數據表已經存在,它會先卸除數據表,然後重新建立數據表。

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

下列 XSD 對應架構提供建立資料表的必要資訊:

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

這相當於 XDR 架構:

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

在現有檔案上開啟數據流

您也可以在現有的 XML 資料檔上開啟數據流,並將數據流當做參數傳遞至 Execute 方法(而不是將檔案名傳遞為 參數)。

這是傳遞數據流做為參數的 Visual Basic 範例:

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  

若要測試應用程式,請在檔案 (SampleData.xml) 和此範例中提供的 XSD 架構中使用下列 XML 檔案:

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

這是對等的 XDR 架構:

<?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. 大量載入溢位數據行

如果對應架構使用 sql:overflow-field 批注來指定溢位數據行,XML 大量載入會將源文檔的所有未處理數據複製到此數據行。

請考慮此 XSD 架構:

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

架構會識別 Cust 數據表的溢位數據行 (OverflowColumn)。 因此,每個 <Customer> 元素的所有未處理 XML 數據都會新增至此數據行。

注意

所有抽象元素(已指定abstract=“true” 的專案)和所有禁止的屬性(指定了 prohibited=“true” 的屬性)都會被 XML 大量載入視為溢位,如果指定,則會新增至溢位數據行。 (否則,會忽略它們。

測試工作範例

  1. 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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleSchema.xml。 將此範例中提供的 XSD 架構新增至 檔案。

  3. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleXMLData.xml。 將下列 XML 檔案新增至 檔案:

    <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. 在慣用的文字或 XML 編輯器中建立檔案,並將它儲存為 ValidateAndBulkload.vbs。 在此檔案中,新增下列Microsoft Visual Basic Scripting Edition (VBScript) 程序代碼。 修改 連接字串 以提供適當的伺服器和資料庫名稱。 為 Execute 方法的參數所指定的檔案指定適當的路徑。

    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 程序代碼。

這是對等的 XDR 架構:

<?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. 在交易模式中指定暫存檔案的檔案路徑

當您在交易模式中大量載入時(也就是 Transaction 屬性設定為 TRUE 時),當下列任一條件為 true 時,您也必須設定 TempFilePath 屬性:

  • 您正在大量載入至遠端伺服器。

  • 您想要使用替代的本機磁碟驅動器或資料夾(TEMP 環境變數所指定路徑以外的一個資料夾)來儲存在交易模式中建立的暫存盤。

例如,下列 VBScript 程式代碼會將SampleXMLData.xml檔案中的數據大量載入交易模式中的資料庫數據表。 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\MyDir"  
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
set objBL=Nothing  

注意

暫存盤路徑必須是可供 SQL Server 目標實例之服務帳戶存取的共用位置,以及執行大量載入應用程式的帳戶。 除非您在本機伺服器上大量載入,否則暫存盤路徑必須是 UNC 路徑(例如 \\servername\sharename)。

測試工作範例

  1. tempdb 資料庫中建立此資料表:

    USE tempdb;  
    CREATE TABLE Cust (     CustomerID uniqueidentifier,   
          LastName  varchar(20));  
    GO  
    
  2. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleSchema.xml。 將下列 XSD 架構新增至 檔案:

    <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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleXMLData.xml。 將下列 XML 檔案新增至 檔案:

    <ROOT>  
    <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF"   
               LastName="Smith" />  
    </ROOT>  
    
  4. 在慣用的文字或 XML 編輯器中建立檔案,並將它儲存為 ValidateAndBulkload.vbs。 在此檔案中,新增下列 VBScript 程序代碼。 修改 連接字串 以提供適當的伺服器和資料庫名稱。 為 Execute 方法的參數所指定的檔案指定適當的路徑。 也指定 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. 執行 VBScript 程序代碼。

    當 CustomerID 的值指定為包含大括弧 ({ 和 }) 的 GUID 時,架構必須指定 CustomerID 屬性的對應 sql:datatype,例如:

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

    這是更新的架構:

    <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 將數據行類型識別為 uniqueidentifier 時,大量載入作業會在將數據行插入數據行之前,先從 CustomerID 值中移除大括弧 ({ 和 })。

這是對等的 XDR 架構:

<?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 屬性使用現有的資料庫連接

您可以使用現有的 ADO 連線大量載入 XML。 如果 XML 大量載入只是將在數據源上執行的許多作業之一,這會很有用。

ConnectionCommand 屬性可讓您使用 ADO 命令物件來使用現有的 ADO 連接。 這在下列 Visual Basic 範例中說明:

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  

測試工作範例

  1. 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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleSchema.xml。 將下列 XSD 架構新增至 檔案:

    <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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleXMLData.xml。 將下列 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 OrderID="4" />  
    </Customers>  
    </ROOT>  
    
  4. 建立 Visual Basic (Standard EXE) 應用程式和上述程式代碼。 將這些參考新增至專案:

    Microsoft XML BulkLoad for SQL Server 4.0 Type Library  
    Microsoft ActiveX Data objects 2.6 Library  
    
  5. 執行應用程式。

這是對等的 XDR 架構:

<?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 資料類型資料列中大量載入

如果對應架構使用 sql:datatype=“xml” 註釋來指定 xml 數據類型數據行,XML 大量載入可以將對應欄位的 XML 子專案從源文件複製到此數據行。

請考慮下列 XSD 架構,這會對應 AdventureWorks 範例資料庫中 Production.ProductModel 數據表的檢視。 在此數據表中,xml 數據類型的 CatalogDescription 欄位會使用 sql:fieldsql:datatype=“xml” 註釋對應至< Desc> 元素。

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

測試工作範例

  1. 確認已安裝 AdventureWorks 範例資料庫。

  2. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleSchema.xml。 複製上述 XSD 架構,並將它貼到檔案中並儲存。

  3. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為SampleXMLData.xml。 複製下方的下列 XML 檔,並將它貼到檔案中,並將它儲存在與上一個步驟所使用的相同資料夾中。

    <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. 在慣用的文字或 XML 編輯器中建立檔案,並將其儲存為 BulkloadXml.vbs。 複製下列 VBScript 程式代碼,並將它貼到檔案中。 將它儲存在與先前 XML 資料和架構檔案所使用的相同資料夾中。

    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 腳本。