Przykłady obciążenia luzem XML (SQLXML 4.0)
Poniższe przykłady ilustrują funkcji obciążenia luzem XML w programie Microsoft SQL Server.Każdy przykład zawiera schematu XSD i jego odpowiednik schematu XDR.
Skrypt Loader luzem (ValidateAndBulkload.vbs)
Poniższy skrypt napisany w Microsoft Visual Basic Scripting Edition (VBScript), ładowania dokumentu XML do modelu DOM języka XML; Walidacja będzie przeprowadzana ze schematem; a jeśli dokument jest prawidłowe, wykonuje XML ładowanie zbiorcze do ładowania XML do SQL Server tabela.Ten skrypt można w każdej z poszczególnych przykłady, które można znaleźć w dalszej części tego tematu.
Ostrzeżenie
Obciążenia luzem XML nie throw ostrzeżenie lub błąd, jeśli zawartość nie jest przekazany 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 się również ErrorLogFile właściwość.Dlatego wyjście błędu jest zapisywany w określonym pliku ("C:\error.log"), który może również podjąć decyzję o zmiany w innej lokalizacji.Również zauważyć, że Execute Metoda ma jako jej parametry mapowanie pliku schematu (SampleSchema.xml) i pliku danych XML (SampleXMLData.xml).Gdy ładowanie zbiorcze wykonuje utworzone w tabela Nabywca tempdb bazy danych będzie zawierać nowe rekordy na podstawie zawartości pliku danych XML.
Aby przetestować ładowanie zbiorcze próbki
Tworzenie tabela:
CREATE TABLE Cust(CustomerID int PRIMARY KEY, CompanyName varchar(20), City varchar(20)) GO
Utwórz plik w tekst preferowanych 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>
Utwórz plik w tekst preferowanych 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>
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku należy dodać kod w języku VBScript przewidzianych powyżej, na początku tego tematu.Zmodyfikuj połączenie ciąg podać nazwę odpowiedniego serwera.Określ odpowiednią ścieżka dla plików, które są określone jako parametry do Execute metoda.
Wykonanie kodu VBScript.XML luzem Load ładuje plik XML do tabela Nabywca.
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 dokument XML składa się z <klienta> i <zamówienia> elementów.
<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>
Luzem ten przykład ładuje dane XML do dwóch tabel, Cust i CustOrder:
Cust(CustomerID, CompanyName, City)
CustOrder(OrderID, CustomerID)
Następującego schematu XSD definiuje Widok XML z tych tabel.Schemat określa relację nadrzędny podrzędność między <klienta> i <zamówienia> elementów.
<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>
Załadować luzem XML używa klucz podstawowy/ relacji klucz obcy określone powyżej między <Cust> i <CustOrder> elementów zbiorcze ładowanie danych w obu tabelach.
Aby przetestować ładowanie zbiorcze próbki
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))
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako SampleSchema.xml.Dodawanie schematu XSD, który jest dostarczany w tym przykładzie do pliku.
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako SampleData.xml.Dodać dokument XML, który został dostarczony wcześniej w tym przykładzie do pliku.
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku należy dodać kod w języku VBScript przewidzianych powyżej, na początku tego tematu.Zmodyfikuj połączenie ciąg zapewniające odpowiednią nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które są określone jako parametry do Execute metoda.
Wykonanie powyższego kodu VBScript.Ładowanie danych XML luzem ładuje dokumentu XML do tabel Nabywca 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ą relacji łańcucha w schemacie do ładowanie zbiorcze XML
Ten przykład ilustruje, jak relacji M:N, która jest określona w schemacie mapowanie jest używany przez załadować luzem XML do ładowania danych w tabela, która reprezentuje relację M:N.
Rozważmy na przykład 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 <produktu> podrzędność elementu.<Zamówienia> element mapuje nika tabela i <produktu> element mapowany do tabela produkt w bazie danych.Określony w relacji łańcucha <produktu> element identyfikuje relacja M:N, reprezentowana przez OrderDetail tabela.(Zamówienie może zawierać wiele produktów i produkt może być uwzględniany w wielu zamówieniach.)
Podczas ładowania dokumentu XML z tego schematu luzem rekordy są dodawane do tabel nika, produktu i OrderDetail.
Aby przetestować przykładowe pracy
Tworzenie trzech tabel:
CREATE TABLE Ord ( OrderID int PRIMARY KEY, CustomerID varchar(5)) GO CREATE TABLE Product ( ProductID int PRIMARY KEY, ProductName varchar(20)) GO CREATE TABLE OrderDetail ( OrderID int FOREIGN KEY REFERENCES Ord(OrderID), ProductID int FOREIGN KEY REFERENCES Product(ProductID), CONSTRAINT OD_key PRIMARY KEY (OrderID, ProductID)) GO
Zapisz schemat, który znajduje się wyżej w tym przykładzie jako SampleSchema.xml.
Zapisz następujące przykładowe dane XML 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>
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku należy dodać kod w języku VBScript przewidzianych powyżej, na początku tego tematu.Zmodyfikuj połączenie ciąg zapewniające odpowiednią nazwę serwera i bazy danych.Usuń oznaczenie komentarza następujące wiersze z źródło kodu tego przykładu.
objBL.CheckConstraints = True objBL.Transaction=True
Wykonanie kodu VBScript.Ładowanie danych XML luzem ładuje dokumentu XML do tabel nika i produktu.
D.Zbiorcze ładowanie w kolumnach typu tożsamości
Ten przykład ilustruje sposób ładowanie zbiorcze obsługuje kolumny typu tożsamości.W przykładzie dane są luzem ładowane do trzech tabel (nika, produktu i OrderDetail).
W poniższych tabelach:
Typ tożsamości jest IDZamówienia w tabela nikakolumna
IDProduktu w tabela produkt jest typ tożsamości kolumna.
Kolumny IDZamówienia i IDProduktu w OrderDetail są kolumny klucz obcy odnoszące się do odpowiednich kolumn klucz podstawowy w tabeli nika i produktu.
Oto tabela schematów w tym przykładzie:
Ord (OrderID, CustomerID)
Product (ProductID, ProductName)
OrderDetail (OrderID, ProductID)
W tym przykładzie XML obciążenia luzem KeepIdentity Właściwość BulkLoad modelu obiektów jest zestaw na false.Dlatego SQL Server generuje tożsamości wartości dla kolumn IDProduktu i IDZamówienia odpowiednio w tabelach produktu i nika (wszystkie wartości w dokumentów, które mają być ładowane luzem są ignorowane).
W tym przypadek obciążenie luzem XML identyfikuje klucz podstawowy/ relacji klucz obcy między tabele.Obciążenia luzem najpierw wstawia rekordy w tabeli klucz podstawowy, a następnie propaguje wartości tożsamości generowane przez SQL Server do tabel z klucz obcy kolumny.W poniższym przykładzie obciążenia luzem XML wstawia dane w tabelach w następującej kolejności:
Produkt
Nika
OrderDetail
Ostrzeżenie
Propagowanie wartości tożsamości generowane w tabela Produkty i zamówienia, logiki przetwarzania wymaga obciążenia luzem XML do śledzenia tych wartości dla nowszych wstawiania do tabela SzczegółyZamówień.W tym celu obciążenia luzem XML tworzy tabele pośrednich, wypełnia danych w tych tabelach i później usuwa je.
Aby przetestować przykładowe pracy
Tworzenie tych tabel:
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
Utwórz plik w tekst preferowanych 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>
Utwórz plik w tekst preferowanych 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>
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku należy dodać poniższy kod VBScript.Zmodyfikuj połączenie ciąg zapewniające odpowiednią nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które służą jako parametry do Wykonywanie 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."
Wykonanie kodu VBScript.Załadować luzem XML załadować danych do odpowiednich tabel.
E.Generowanie schematów tabela przed zbiorcze ładowanie
Obciążenia luzem XML można generować tabele opcjonalnie, jeśli nie istnieją przed zbiorcze ładowanie.Ustawienie SchemaGen Właściwość SQLXMLBulkLoad robi to obiekt true.Można też dodatkowo zażądać obciążenia luzem XML, aby usunąć istniejące tabele i ponownie je przez ustawienie SGDropTables Właściwość TRUE.W następującym przykładzie VBScript ilustruje użycie tych właściwości.
Ten przykład ustawia również, 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 nie powiedzie się.
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 przetestować przykładowe pracy
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako SampleSchema.xml.Dodać schematu XSD, który jest dostarczany w przykładzie wcześniejszych "Za pomocą łańcucha relacji w schemacie do ładowanie zbiorcze XML", do pliku.
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako SampleXMLData.xml.Dodawanie dokumentu XML, który jest dostarczany w przykładzie wcześniejszych "Za pomocą łańcucha relacji w schemacie do ładowanie zbiorcze XML", do pliku.Usuń <głównego> element z dokumentu (Aby fragment).
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku w tym przykładzie należy dodać kod VBScript.Zmodyfikuj połączenie ciąg zapewniające odpowiednią nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które są określone jako parametry do Execute metoda.
Wykonanie kodu VBScript.Obciążenia luzem XML tworzy tabele niezbędne ze schematu mapowanie jest ładunków przewidzianych i zbiorczego dane w nim.
F.Zbiorcze ładowanie ze strumienia
Execute Metoda modelu obiektów XML luzem obciążenia przyjmuje dwa parametry.Pierwszy parametr jest mapowanie pliku schematu.Drugi parametr zawiera dane XML, który ma być załadowany w bazie danych.Istnieją dwa sposoby przekazywania danych XML do Execute metoda obciążenia luzem XML:
Określ nazwę pliku jako parametr.
Przekazać strumienia, który zawiera dane XML.
Ten przykład ilustruje sposób ładowanie zbiorcze ze strumienia.
VBScript wykonuje najpierw instrukcja SELECT, aby pobrać informacje klienta z tabela Klienci w bazie danych Northwind.Ponieważ XML dla klauzula jest określony (z opcją elementów) w instrukcja SELECT, kwerenda zwraca zorientowany na element dokumentu XML formularza:
<Customer>
<CustomerID>..</CustomerID>
<CompanyName>..</CompanyName>
<City>..</City>
</Customer>
...
Skrypt przechodzi następnie XML jako strumień do Execute metoda jako jej drugi parametr.Execute Luzem metoda powoduje załadowanie danych w tabela Nabywca.
Ponieważ ten skrypt ustawia SchemaGen Właściwości na wartość TRUE i SGDropTables właściwość na wartość TRUE, obciążenia luzem XML tworzy tabela Cust w określonej bazie danych.(Jeśli tabela już istnieje, to pierwsze krople tabeli i odtwarza go)
Jest to 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ącego schematu XSD mapowania zawiera informacje potrzebne 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 strumienia na istniejącym pliku
Można również otworzyć strumień istniejącego pliku danych XML i przekazać strumienia jako parametr Execute metoda (zamiast nazwy pliku przekazując jako parametr).
Jest to przykład Visual Basic przekazując jako parametr strumienia:
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, przewidziana w tym przykładzie:
Jest to plik XML źródło 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 Kolumna przepełnienia za pomocą sql:overflow-field adnotacji XML luzem obciążenia kopiuje wszystkie dane niewykorzystana z źródło dokumentu w tej kolumnie.
Należy rozważyć 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 Kolumna przepełnienia (OverflowColumn) w tabela Nabywca.W wyniku unconsumed wszystkich danych XML dla każdego <klienta> element jest dodawany do kolumna.
Ostrzeżenie
Abstrakcyjne wszystkich elementów (elementy, dla których abstrakcyjny = "true" określono) i wszystkie atrybuty (atrybuty, które zabronione = "true" określono) są uważane za przepełnienie obciążeniem luzem XML i są dodawane do Kolumna przepełnienia, jeśli określony.(W przeciwnym przypadku są one ignorowane.)
Aby przetestować przykładowe pracy
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
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako SampleSchema.xml.Dodawanie schematu XSD, który jest dostarczany w tym przykładzie do pliku.
Utwórz plik w tekst preferowanych 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>
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku należy dodać poniższy kod języka Microsoft Visual Basic Scripting Edition (VBScript).Zmodyfikuj połączenie ciąg zapewniające odpowiednią nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które są określone 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
Wykonanie 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 załadunku luzem w trybie transakcji (to znaczy, gdy Transaction właściwość jest zestaw true), musi również zestaw TempFilePath Właściwości, gdy jest spełniony jeden z następujących warunków:
Są załadunku luzem z serwerem zdalnym.
Chcesz użyć alternatywnej lokalnego dysku lub folderu (jeden innych niż ścieżka określonej przez zmienną środowiskową TEMP) do przechowywania plików tymczasowych, które zostały utworzone w trybie transakcji.
Na przykład następujące masowe kodu VBScript ładuje dane z pliku SampleXMLData.xml do tabel bazy danych w trybie transakcji.TempFilePath Do określono właściwość zestaw ścieżka dla plików tymczasowych, które są generowane w trybie transakcji.
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
Ostrzeżenie
Ścieżka pliku tymczasowego musi być dostępnym dla konta usługa miejsce docelowe lokalizacji udostępnionej wystąpienie z SQL Server i konto jest uruchomiona aplikacja obciążenia luzem.Chyba, że są załadunku luzem na serwerze lokalnym, ścieżka pliku tymczasowego musi być ścieżką UNC (na przykład \\nazwa_serwera\nazwa_udziału).
Aby przetestować przykładowe pracy
Tworzenie tabela w tempdb bazy danych:
USE tempdb CREATE TABLE Cust ( CustomerID uniqueidentifier, LastName varchar(20)) GO
Utwórz plik w tekst preferowanych 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>
Utwórz plik w tekst preferowanych 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>
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako ValidateAndBulkload.vbs.Do tego pliku należy dodać poniższy kod VBScript.Zmodyfikuj połączenie ciąg zapewniające odpowiednią nazwę serwera i bazy danych.Określ odpowiednią ścieżka dla plików, które są określone 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
Wykonanie kodu VBScript.
Schemat należy określić odpowiednie sql:datatype dla IDklienta atrybut, gdy wartość IDklienta 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 zaktualizowanym schemacie:
<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>
Gdy sql:datatype określono identyfikujące typ kolumna jako uniqueidentifier, ładowanie zbiorcze operacji usuwa nawiasy klamrowe ({i}) z IDklienta 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 istniejącego połączenia bazy danych
Można użyć istniejącego połączenia ADO do ładowanie zbiorcze XML.Jest to przydatne, jeżeli jest tylko jedno z wielu operacji, które będą wykonywane na danych XML luzem obciążenia źródło.
ConnectionCommand Właściwość umożliwia korzystanie z istniejącego połączenia ADO przy użyciu obiektu polecenia ADO.Ilustruje to poniższy przykład 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 przetestować przykładowe pracy
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
Utwórz plik w tekst preferowanych 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>
Utwórz plik w tekst preferowanych 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>
Tworzenie aplikacji Visual Basic (Standard EXE) i poprzednim kodem.Dodaj te odwołania do projektu:
Microsoft XML BulkLoad for SQL Server 4.0 Type Library Microsoft ActiveX Data objects 2.6 Library
Wykonanie wniosku.
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.Luzem ładowania XML typu danych kolumny
Jeśli określono mapowania schematu Typ danych xml kolumna za pomocą sql:datatype="xml" adnotacji XML luzem obciążenia można skopiować elementów podrzędność XML dla pole mapowane z źródło dokumentu w tej kolumnie.
Należy rozważyć schematu XSD następujące mapuje widok tabela Production.ProductModel w bazie danych AdventureWorks2008R2.W tej tabela pole CatalogDescription z xml Typ danych jest mapowany do <Desc> 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 przetestować przykładowe pracy
- Sprawdź, czy zainstalowano przykładowej bazy danych AdventureWorks2008R2.
Aby uzyskać więcej informacji, zobacz Przykładowe bazy danych AdventureWorks2008R2.
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako SampleSchema.xml.Powyżej schematu XSD skopiować i wkleić go do pliku i zapisz go.
Utwórz plik w tekst preferowanych lub edytora XML i zapisać go jako SampleXMLData.xml.Skopiuj następujący dokument XML poniżej i wkleić go do pliku i zapisać w tym samym folderze, jaka 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>
Utwórz plik w tekst preferowanych 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 schematu XML.
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0") objBL.ConnectionString = "provider=SQLOLEDB;data source=MyServer;database=AdventureWorks2008R2;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
Uruchom skrypt BulkloadXml.vbs.