Udostępnij za pośrednictwem


Przykłady obciążenia zbiorcze XML (SQLXML 4.0)

Poniższe przykłady ilustrują XML ładowanie zbiorcze funkcje w programie Microsoft SQL Server. Każdy przykładzie podano schematu XSD i jego odpowiednik schematu XDR.

Skrypt modułu ładującego zbiorczej (ValidateAndBulkload.vbs)

Poniższy skrypt, napisany w Microsoft Visual Basic wykonywanie skryptów Edition (VBScript), ładuje dokumentu XML do modelu DOM języka XML; sprawdza poprawność go ze schematem; i, jeśli dokument jest prawidłowy, wykonuje XML ładowanie zbiorcze załadować kodu XML w SQL Server Tabela. Ten skrypt można używać z każdym z poszczególnych przykłady, które odwołują się do niej w dalszej części tego tematu.

Uwaga

XML ładowanie zbiorcze nie generują ostrzeżenie lub błąd, jeśli żadna zawartość nie jest przekazywane z pliku danych.Dlatego jest dobrą praktyką, aby sprawdzić poprawność pliku danych XML przed do wykonywania ładowanie zbiorcze operacji.

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.Zbiorcze ładowanie XML do tabela

W tym przykładzie ustanawia połączenie z wystąpienie SQL Server określona w ConnectionString Właściwość (MójSerwer). W przykładzie określa również ErrorLogFile Właściwość. W związku z tym dane wyjściowe błąd jest zapisywana w określonym pliku ("C:\error.log"), które można również zdecydować, aby zmienić w innej lokalizacji.Również zauważyć, że Execute Metoda ma w jego parametry mapowania plik schematu (SampleSchema.xml) i pliku danych XML (SampleXMLData.xml). Podczas ładowania zbiorczego jest wykonywana, tabela Cust utworzone w tempdb bazy danych będzie zawierać nowe rekordy na podstawie zawartości pliku danych XML.

Aby przetestować ładowanie zbiorcze próbki

  1. Utwórz w tej tabela:

    CREATE TABLE Cust(CustomerID  int PRIMARY KEY,
                      CompanyName varchar(20),
                      City        varchar(20))
    GO
    
  2. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleSchema.xml.Do tego pliku należy dodać następujące schematu 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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleXMLData.xml.Do tego pliku należy dodać następujący dokument 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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku na początku tego tematu należy dodać kod języka VBScript, który znajduje się powyżej.Zmodyfikować ciąg połączenia, podaj nazwę odpowiedniego serwera.Określ odpowiednią ścieżka dla plików, które określono jako parametry do Execute Metoda.

  5. wykonać kodu VBScript.XML ładowanie zbiorcze ładuje plik XML do tabela Cust.

Jest to równoważne schematu 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>

B.Zbiorcze ładowanie danych XML w wielu tabelach

W tym przykładzie składa się z dokumentem XML <Odbiorcy> i <Zamówienia> elementy.

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

Ten przykład zbiorczej powoduje załadowanie danych XML na dwie tabele Cust and CustOrder:

Cust(CustomerID, CompanyName, City)
CustOrder(OrderID, CustomerID)

Następujące schematu XSD definiuje Widok XML z tych tabel.Schemat określa relację nadrzędny podrzędność między <Odbiorcy> i <Zamówienia> elementy.

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

Używa XML ładowanie zbiorcze klucz podstawowy / relacja klucz obcy określone powyżej między <Cust> i <CustOrder> elementy masowe załadować danych w obu tabelach.

Aby przetestować ładowanie zbiorcze próbki

  1. Utwórz dwie tabele w tempdb bazy danych:

    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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleSchema.xml.Dodawanie schematu XSD, który znajduje się w tym przykładzie do pliku.

  3. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleData.xml.Dodawanie dokumentu XML, który został dostarczony wcześniej w tym przykładzie do pliku.

  4. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku na początku tego tematu należy dodać kod języka VBScript, który znajduje się powyżej.Zmodyfikować ciąg połączenia, aby zapewnić właściwą nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które określono jako parametry do Execute Metoda.

  5. wykonać powyższych kodu VBScript.XML ładowanie zbiorcze ładuje dokumentu XML do tabel Cust i CustOrder.

Jest to równoważne schematu 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>

C.Za pomocą łańcuch relacji w schemacie do ładowanie zbiorcze XML

Ten przykład ilustruje, jak relacji M:N, która jest określona w schemacie mapowania jest używany przez ładowanie zbiorcze XML do załadowania danych w tabela, która reprezentuje na relację M:N.

Na przykład należy wziąć pod uwagę tego schematu 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>

Określa schemat <Zamówienia> element z <Produkt> element podrzędność. The <Order> element maps to Ord tabela and the <Product> element maps to the Product tabela in the database. Określony w relacji łańcucha <Produkt> element określa relację M:N reprezentowanych przez tabela OrderDetail. (Zamówienie może obejmować wiele produktów, a produkt może być uwzględniany w wielu zamówieniach.)

Kiedy zbiorczego ładowania dokumentu XML z tego schematu, rekordy są dodawane do zakupu produktu i OrderDetail tabel.

Aby testować przykładowe pracy

  1. Utwórz trzy tabele:

    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. Zapisz schemat, który znajduje się powyżej w tym przykładzie jako SampleSchema.xml.

  3. Następujące przykładowe dane XML można zapisać jako 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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku na początku tego tematu należy dodać kod języka VBScript, który znajduje się powyżej.Zmodyfikować ciąg połączenia, aby zapewnić właściwą nazwę serwera i bazy danych.Uncomment z kodu źródłowego, na przykład poniższe wiersze.

    objBL.CheckConstraints = True
    objBL.Transaction=True
    
  5. wykonać kodu VBScript.XML ładowanie zbiorcze ładuje dokumentu XML do tabel zakupu i produkt.

D.Zbiorcze ładowanie w kolumnach typu tożsamości

Ten przykład ilustruje, jak ładowanie zbiorcze obsługuje kolumny typu tożsamości.W tym przykładzie dane są zbiorcze ładowane do trzech tabel (zakupu produktów i OrderDetail).

W poniższych tabelach:

  • Identyfikator zamówienia w tabela zakupu jest to kolumna identyfikacji typu

  • IDProduktu w tabela produkt jest to kolumna identyfikacji typu.

  • OrderDetail IDZamówienia i IDProduktu kolumn są kolumny klucz obcy odnoszące się do odpowiedniej kolumny klucz podstawowy w tabelach zakupu i produkt.

Schematy tabela, w tym przykładzie są następujące:

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

W tym przykładzie XML ładowanie zbiorcze KeepIdentity Właściwość BulkLoad model obiektów jest ustawiona na wartość false. Dlatego też SQL Server generuje tożsamości wartości dla kolumn IDProduktu i IDZamówienia w tabeli produktów i zakupu, odpowiednio (wszystkie wartości w dokumentów, które mają być zbiorczego ładowania są pomijane).

W tym przypadek XML ładowanie zbiorcze identyfikuje podstawowego relacja klucz obcy/klucz między tabelami.ładowanie zbiorcze najpierw wstawia rekordy w tabeli klucz podstawowy, a następnie propaguje generowane przez wartości tożsamości SQL Server do tabel z kolumny klucz obcy. W poniższym przykładzie XML ładowanie zbiorcze wstawia dane w tabelach w następującej kolejności:

  1. Produkt

  2. Zakupu

  3. OrderDetail

    Uwaga

    W celu propagowania wartości tożsamości generowane w tabela Produkty i zamówienia, logiki przetwarzania wymaga XML ładowanie zbiorcze do przechowywania informacji o tych wartości dla nowszych wstawiania do tabela SzczegółyZamówienia.W tym celu, XML ładowanie zbiorcze tworzy tabele pośrednie, wypełnia danych w tych tabelach i usuwa je później.

Aby testować przykładowe pracy

  1. Utwórz następujące tabele:

    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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleSchema.xml.Dodawanie tego schematu XSD do tego pliku.

    <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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleXMLData.xml.Dodaj następujący dokument 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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku Dodaj następujący kod w języku VBScript.Zmodyfikować ciąg połączenia, aby zapewnić właściwą nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które służą jako parametry do wykonać metoda.

    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. wykonać kodu VBScript.ładowanie zbiorcze XML załadować dane do odpowiednich tabel.

E.Generowanie schematów tabela przed zbiorcze ładowanie

XML ładowanie zbiorcze opcjonalnie może generować tabel, jeśli nie istnieją one przed zbiorcze ładowanie.Ustawianie SchemaGen Właściwość SQLXMLBulkLoad obiekt ma wartość PRAWDA wykonuje to zadanie. Można zażądać też dodatkowo obciążenia Bulk XML, aby usunąć istniejące tabele i ponowne tworzenie ustawiając SGDropTables Właściwość na wartość TRUE. W poniższym przykładzie VBScript ilustruje użycie tych właściwości.

W tym przykładzie ustawia także dwa dodatkowe właściwości na wartość TRUE:

  • CheckConstraints.Setting this property to TRUE ensures that the data being inserted into the tables does not violate any constraints that have been specified on the tables (in this case the PRIMARY KEY/FOREIGN KEY constraints specified between the Cust and CustOrder tables).Jeśli występuje naruszenie ograniczenia, ładowanie zbiorcze zakończy się niepowodzeniem.

  • XMLFragment.This property must be set to TRUE because the sample XML document (data source) contains no single, top-level element (and is thus a fragment).

Jest to kod 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

Aby testować przykładowe pracy

  1. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleSchema.xml.Dodatek schematu XSD, że pochodzi z poprzedniego przykładu, „ Using łańcucha relacji w schemacie do ładowanie zbiorcze XML", do pliku.

  2. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleXMLData.xml.Dodawanie dokumentu XML, który znajduje się w poprzedniego przykładu, „ Using łańcucha relacji w schemacie do ładowanie zbiorcze XML", do pliku.Usuwanie <KATALOG GŁÓWNY> element z dokumentu (aby stał się on fragment).

  3. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku w tym przykładzie należy dodać kod w języku VBScript.Zmodyfikować ciąg połączenia, aby zapewnić właściwą nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które określono jako parametry do Execute Metoda.

  4. wykonać kodu VBScript.Kod XML ładowanie zbiorcze tworzy w niej niezbędne tabel w oparciu o schemat mapowania, które jest dostępne i ładowanie zbiorcze s danych.

F.Zbiorcze ładowanie ze strumienia

The Execute metoda of the XML ładowanie zbiorcze object model takes two parameters. Pierwszy parametr jest mapowanie pliku schematu.Drugi parametr zawiera dane XML, które ma być załadowany w bazie danych.Istnieją dwa sposoby umożliwiające przekazywanie danych XML do Execute Metoda XML ładowanie zbiorcze:

  • Określ nazwę pliku jako parametr.

  • Przekazywanie strumienia, który zawiera dane XML.

Ten przykład ilustruje sposób ładowanie zbiorcze ze strumienia.

VBScript wykonuje najpierw instrukcja SELECT w celu pobrania informacji o kliencie z tabela Klienci w bazie danych Northwind.Ponieważ w instrukcja SELECT określono klauzulę FOR XML (przy użyciu opcji elementów), kwerenda zwraca zorientowane na element dokumentu XML tego formularza:

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

Następnie skrypt przekazuje plik XML jako strumień do Execute Metoda jako jej drugi parametr. The Execute metoda bulk loads the data into the Cust tabela.

Ponieważ ten skrypt ustawia SchemaGen Właściwość na wartość TRUE i SGDropTables Właściwość ma wartość TRUE, obciążenia zbiorcze XML tworzy tabela Cust we wskazanej bazie danych. (Jeśli istnieje już w tabela, go najpierw obniży się w tabela i następnie ponownie utworzony.)

To jest przykład 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

Następujące schematu XSD mapowania podano informacje niezbędne do utworzenia tabela:

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

Jest to równoważne schematu 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>

Otwieranie strumień na istniejącym pliku

Można również otworzyć strumień na istniejącym pliku danych XML i przekazywać w strumieniu jako parametr Execute Metoda (a nie przekazując nazwę pliku jako parametr).

To jest przykład kodu języka Visual Basic przekazywania strumienia jako parametr:

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

Aby przetestować aplikację, należy użyć następującego dokumentu XML w pliku (SampleData.xml) i schematu XSD, opisanej w tym przykładzie:

Jest to plik XML urządzenie źródłowe danych (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>

Jest to równoważne schematu 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.Zbiorcze ładowanie w kolumnach przepełnienia

Jeśli mapowanie schematu określa to kolumna przepełnienia przy użyciu sql:overflow-field Adnotacja XML ładowanie zbiorcze kopiuje wszystkie dane nieużywanej z dokumentu źródłowego w tej kolumnie.

Należy wziąć pod uwagę tego schematu 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>

Schemat identyfikuje to kolumna przepełnienia (OverflowColumn) w tabela Cust.W rezultacie unconsumed wszystkich danych XML dla każdego <Odbiorcy> element zostanie dodany do tej kolumna.

Uwaga

Abstrakcyjne wszystkich elementów (elementy, dla którego Klasa abstrakcyjna = "true" jest określona) i zabronione wszystkie atrybuty (atrybuty, które zabronione = "true" określono) są traktowane jako przepełnienie przez XML ładowanie zbiorcze i są dodawane do Kolumna przepełnienia, jeśli została określona.(W przeciwnym razie są one ignorowane.)

Aby testować przykładowe pracy

  1. Utwórz dwie tabele w tempdb bazy danych:

    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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleSchema.xml.Dodawanie schematu XSD, który znajduje się w tym przykładzie do pliku.

  3. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleXMLData.xml.Dodaj następujący dokument XML do pliku:

    <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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku Dodaj następujący kod programu Microsoft Visual Basic wykonywanie skryptów Edition (VBScript).Zmodyfikować ciąg połączenia, aby zapewnić właściwą nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które określono jako parametry do Execute Metoda.

    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. wykonać kodu VBScript.

Jest to równoważne schematu 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.Określając ścieżka pliku dla plików tymczasowych w trybie transakcji

Podczas ładowania zbiorczej w trybie transakcji (to znaczy, kiedy Transaction Właściwość jest ustawiona na wartość TRUE), należy także ustawić TempFilePath Właściwość, gdy spełniony jest jeden z następujących warunków:

  • Jesteś zbiorczego ładowania z serwerem zdalnym.

  • Aby za pomocą alternatywnych dysków lokalnych lub folder (po jednym innym niż ze ścieżka określoną przez zmienną środowiskową TEMP) do przechowywania plików tymczasowych, które zostały utworzone w trybie transakcji.

Na przykład następujące masowe kod VBScript ładuje dane z pliku SampleXMLData.xml do tabel bazy danych w trybie transakcji.The TempFilePath właściwość is specified to zestaw the ścieżka for the temporary files that are generated in transaction mode.

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

Uwaga

Ścieżka pliku tymczasowego musi być w udostępnionej lokalizacji dostępnej dla konta usługa z miejsce docelowe SQL Server i na konto, na którym działa aplikacja ładowanie zbiorcze. Chyba że masz zbiorczego ładowania na lokalnym serwerze ścieżka pliku tymczasowego musi być ścieżką UNC (na przykład \\nazwa_serwera\nazwa_udziału).

Aby testować przykładowe pracy

  1. Tworzenie tabela w tempdb bazy danych:

    USE tempdb
    CREATE TABLE Cust (     CustomerID uniqueidentifier, 
          LastName  varchar(20))
    GO
    
  2. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleSchema.xml.Do pliku, należy dodać następujące schematu 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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleXMLData.xml.Dodaj następujący dokument XML do pliku:

    <ROOT>
    <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF" 
               LastName="Smith" />
    </ROOT>
    
  4. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku Dodaj następujący kod w języku VBScript.Zmodyfikować ciąg połączenia, aby zapewnić właściwą nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które określono jako parametry do Execute Metoda. Także określić odpowiednią ścieżka dla TempFilePath Właściwość.

    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. wykonać kodu VBScript.

    Schemat, należy określić odpowiednie sql:datatype dla Identyfikator klienta atrybut, gdy wartość Identyfikator klienta jest określony jako identyfikator GUID, który zawiera nawiasy klamrowe ({i}), takie jak:

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

    Jest to schemat zaktualizowane:

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

    Kiedy sql:datatype jest określony, określający typ kolumna jako uniqueidentifier, ładowanie zbiorcze operacja usuwa nawiasy klamrowe ({i}) z Identyfikator klienta wartość przed wstawieniem kolumna.

Jest to równoważne schematu 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.Właściwość ConnectionCommand przy użyciu połączenia z istniejącą bazą danych

Można użyć istniejącego połączenia ADO do ładowanie zbiorcze XML.Jest to przydatne, jeśli XML ładowanie zbiorcze jest tylko jedno z wielu operacji, które będą wykonywane w odniesieniu do urządzenie źródłowe danych.

The ConnectionCommand właściwość enables you to use an existing ADO connection by using an ADO command object. Jest to zilustrowane w poniższym przykładzie kodu języka 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

Aby testować przykładowe pracy

  1. Utwórz dwie tabele w tempdb bazy danych:

    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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleSchema.xml.Do pliku, należy dodać następujące schematu 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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleXMLData.xml.Dodaj następujący dokument XML do pliku:

    <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. Tworzenie aplikacji Visual Basic (Standard EXE) i poprzedni kod.Dodaj te odwołania do projektu:

    Microsoft XML BulkLoad for SQL Server 4.0 Type Library
    Microsoft ActiveX Data objects 2.6 Library
    
  5. Uruchomić aplikację.

Jest to równoważne schematu 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.Zbiorcza, Trwa ładowanie danych xml kolumny Typ danych

Jeśli określono mapowania schematu Typ danych XML kolumna przy użyciu sql:datatype="xml" adnotację, XML zbiorcze obciążenia można skopiować elementów podrzędność XML dla pole mapowane z urządzenie źródłowe dokumentu w tej kolumnie.

Należy wziąć pod uwagę następujące schematu XSD, która mapuje widok tabela Production.ProductModel przykładowej bazy danych AdventureWorks.W tej tabela, pole CatalogDescription xml Typ danych jest mapowany na <Opis> za pomocą elementu sql:field i sql:datatype="xml" adnotacje.

<?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="https://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>

Aby testować przykładowe pracy

  1. Sprawdź, czy zainstalowano przykładowej bazy danych AdventureWorks.

    Aby uzyskać więcej informacji zobaczAdventureWorks przykładowe bazy danych.

  2. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleSchema.xml.Powyżej schematu XSD skopiować i wkleić go do pliku, a następnie zapisz go.

  3. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako SampleXMLData.xml.Skopiuj następujący dokument XML poniżej i wkleić go do pliku i zapisać go w tym samym folderze, jak została użyta w poprzednim kroku.

    <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" 
                  >
                <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; alumunim 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>Almuminum 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. Utwórz plik w preferowanym tekstu lub edytora XML i zapisać go jako BulkloadXml.vbs.Skopiuj poniższy kod VBScript i wkleić go do pliku.Zapisać go w tym samym folderze, jak został użyty dla poprzednich plików danych i schematem 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. Uruchom skrypt BulkloadXml.vbs.