Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Az alábbi példák szemlélteti az XML Bulk Load funkcióját a Microsoft SQL Serverben. Minden példa tartalmaz egy XSD sémát és annak megfelelő XDR sémát.
Bulk Loader Script (ValidateAndBulkload.vbs)
A következő szkript, amelyet a Microsoft Visual Basic Scripting Edition (VBScript) írt, egy XML dokumentumot tölt be az XML DOM-ba; megerősíti egy sémához képest; és ha a dokumentum érvényes, XML tömeges betöltést hajt végre, hogy az XML-t egy SQL Server táblába töltse be. Ez a szkript használható minden egyes példával, amely később hivatkozik rá ebben a témában.
Megjegyzés:
Az XML Bulk Load nem ad figyelmeztetést vagy hibát, ha nem töltik fel tartalmat az adatfájlból. Ezért jó gyakorlat az XML adatfájl érvényesítése a tömeges betöltési művelet végrehajtása előtt.
Dim FileValid
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ConnectionString = "provider=SQLOLEDB;data source=MyServer;database=tempdb;integrated security=SSPI"
objBL.ErrorLogFile = "c:\error.log"
'Validate the data file prior to bulkload
Dim sOutput
sOutput = ValidateFile("SampleXMLData.xml", "", "SampleSchema.xml")
WScript.Echo sOutput
If FileValid Then
' Check constraints and initiate transaction (if needed)
' objBL.CheckConstraints = True
' objBL.Transaction=True
'Execute XML bulkload using file.
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"
set objBL=Nothing
End If
Function ValidateFile(strXmlFile,strUrn,strXsdFile)
' Create a schema cache and add SampleSchema.xml to it.
Dim xs, fso, sAppPath
Set fso = CreateObject("Scripting.FileSystemObject")
Set xs = CreateObject("MSXML2.XMLSchemaCache.6.0")
sAppPath = fso.GetFolder(".")
xs.Add strUrn, sAppPath & "\" & strXsdFile
' Create an XML DOMDocument object.
Dim xd
Set xd = CreateObject("MSXML2.DOMDocument.6.0")
' Assign the schema cache to the DOM document.
' schemas collection.
Set xd.schemas = xs
' Load XML document as DOM document.
xd.async = False
xd.Load sAppPath & "\" & strXmlFile
' Return validation results in message to the user.
If xd.parseError.errorCode <> 0 Then
ValidateFile = "Validation failed on " & _
strXmlFile & vbCrLf & _
"=======" & vbCrLf & _
"Reason: " & xd.parseError.reason & _
vbCrLf & "Source: " & _
xd.parseError.srcText & _
vbCrLf & "Line: " & _
xd.parseError.Line & vbCrLf
FileValid = False
Else
ValidateFile = "Validation succeeded for " & _
strXmlFile & vbCrLf & _
"========" & _
vbCrLf & "Contents to be bulkloaded" & vbCrLf
FileValid = True
End If
End Function
A. XML tömeges betöltése egy táblában
Ez a példa egy kapcsolatot hoz létre az SQL Server példányával, amelyet a ConnectionString tulajdonság (MyServer) határoz meg. A példa megadja a ErrorLogFile tulajdonságot is. Ezért a hiba kimenete a megadott fájlba kerül ("C:\error.log"), amelyet szintén megváltoztathatsz egy másik helyre. Figyeljük meg azt is, hogy az Execute metódus paraméterei mind a leképezési séma fájlt (SampleSchema.xml), mind az XML adatfájlt (SampleXMLData.xml). Amikor a tömeges betöltés elindul, a tempdb adatbázisban létrehozott Cust tábla új rekordokat fog tartalmazni az XML adatfájl tartalmán alapulva.
Mintatömegterhelés tesztelésére
Hozza létre ezt a táblát:
CREATE TABLE Cust(CustomerID int PRIMARY KEY, CompanyName varchar(20), City varchar(20)); GOHozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleSchema.xml. Ehhez a fájlhoz adjuk hozzá a következő XSD sémát:
<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>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleXMLData.xml. Ehhez a fájlhoz adjuk hozzá a következő XML dokumentumot:
<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>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd el ValidateAndBulkload.vbs néven. Ehhez a fájlhoz add hozzá a fentebb megadott VBScript kódot a téma elején. Módosítsd a kapcsolati láncot a megfelelő szervernév megadására. Határozd meg a megfelelő útvonalat azoknak a fájloknak, amelyek paraméterként vannak megadva az Execute metódushoz.
Hajtsd végre a VBScript kódot. Az XML Bulk Load betölti az XML-t a Cust táblába.
Ez a megfelelő XDR-séma:
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
<ElementType name="CustomerID" dt:type="int" />
<ElementType name="CompanyName" dt:type="string" />
<ElementType name="City" dt:type="string" />
<ElementType name="ROOT" sql:is-constant="1">
<element type="Customers" />
</ElementType>
<ElementType name="Customers" sql:relation="Cust" >
<element type="CustomerID" sql:field="CustomerID" />
<element type="CompanyName" sql:field="CompanyName" />
<element type="City" sql:field="City" />
</ElementType>
</Schema>
B. XML adatok tömeges betöltése több táblába
Ebben a példában az XML dokumentum az <Ügyfél> - és <Rendelés-elemekből> áll.
<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>
Ez a példa tömegesen betölti az XML adatokat két táblába, Custba és CustOrderbe:
Cust(CustomerID, Cégnév, Város)
CustOrder(OrderID, CustomerID)
A következő XSD séma határozza meg ezeknek a táblázatoknak az XML nézetét. A séma meghatározza az Ügyfél> és Rendelés elemek közötti szülő-gyermek kapcsolatot<.><
<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>
Az XML Bulk Load a fent megadott elsődleges kulcs/idegen kulcs kapcsolatot használja a <Cust> és <CustOrder> elemek között, hogy az adatokat tömegesen betöltse mindkét táblába.
Mintatömegterhelés tesztelésére
Hozz létre két táblát a tempdb adatbázisban:
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));Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleSchema.xml. Hozzáadjuk a példában található XSD sémát a fájlhoz.
Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleData.xml. Hozzáadjuk a korábbi példában megadott XML dokumentumot a fájlhoz.
Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd el ValidateAndBulkload.vbs néven. Ehhez a fájlhoz add hozzá a fentebb megadott VBScript kódot a téma elején. Módosítsd a kapcsolati láncsort, hogy megadja a megfelelő szerver- és adatbázisnevet. Határozd meg a megfelelő útvonalat azoknak a fájloknak, amelyek paraméterként vannak megadva az Execute metódushoz.
Hajtsd végre a fenti VBScript kódot. Az XML Bulk Load betölti az XML dokumentumot a Cust és CustOrder táblákba.
Ez a megfelelő XDR-séma:
<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. Lánckapcsolatok használata a sémában XML tömeges betöltéséhez
Ez a példa bemutatja, hogyan használja az XML Bulk Load által az M:N kapcsolatot egy olyan táblázatba, amely M:N kapcsolatot ábrázol, az M:N viszonyban megadott M:N viszonyban történő betöltésére.
Vegyük például ezt az XSD-sémát:
<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>
A séma egy <Order> elemet jelöl meg egy <Product> gyermekelemmel. A< Order> elem az Ord táblához, a <Product> elem pedig az adatbázis Product táblájához leképezi. A Product> elemen megadott< lánckapcsolat egy M:N kapcsolatot jelöl, amelyet a OrderDetail tábla képvisel. (Egy rendelés sok terméket tartalmazhat, és egy termék sok rendelésben is szerepelhet.)
Amikor ezzel a sémával tömegesen töltünk be XML dokumentumot, a rekordokat az Ord, Product és OrderDetail táblákba adják fel.
Egy működő minta teszteléséhez
Hozz létre három táblázatot:
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)); GOA fenti példában megadott sémát SampleSchema.xml.
A következő XML adat mintaadatokat SampleXMLData.xmlalatt tároljuk:
<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>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd el ValidateAndBulkload.vbs néven. Ehhez a fájlhoz add hozzá a fentebb megadott VBScript kódot a téma elején. Módosítsd a kapcsolati láncsort, hogy megadja a megfelelő szerver- és adatbázisnevet. Töröld a következő sorokat a forráskódból ehhez a példához.
objBL.CheckConstraints = True objBL.Transaction=TrueHajtsd végre a VBScript kódot. Az XML Bulk Load betölti az XML dokumentumot az Ord és Product táblákba.
D. Tömeges betöltés identitástípus-oszlopokban
Ez a példa szemlélteti, hogyan kezeli a tömeges terhelés az identitástípusú oszlopokat. A példában az adatok három táblázatba (Ord, Product és OrderDetail) tömve vannak betöltve.
Ezekben a táblázatokban:
Az Ord táblában a OrderID egy identitástípus-oszlop
A Product ID a Termék táblában egy identitástípus-oszlop.
A OrderID és ProductID oszlopok a OrderDetailben idegen kulcsoszlopok, amelyek az Ord és Product táblák megfelelő elsődleges kulcsoszlopaira utalnak.
Az alábbiakban a táblázat sémái láthatók ehhez a példához:
Ord (OrderID, CustomerID)
Product (ProductID, ProductName)
OrderDetail (OrderID, ProductID)
Ebben az XML Bulk Load példában a BulkLoad objektummodell KeepIdentity tulajdonsága false-nak van állítva. Ezért az SQL Server identitásértékeket generál a ProductID és OrderID oszlopokhoz a Product és Ord táblákban, rendre (a dokumentumokban megadott értékeket figyelmen kívül hagyják).
Ebben az esetben az XML Bulk Load azonosítja a táblák közötti elsődleges kulcs/idegen kulcs kapcsolatot. A tömeges betöltés először a táblákba helyezi be a rekordokat az elsődleges kulccsal, majd az SQL Server által generált identitásértéket terjeszti az idegen kulcsoszlopokkal rendelkező táblákba. A következő példában az XML Bulk Load az alábbi sorrendben helyezi be az adatokat táblázatokba:
Termék
Ord
OrderDetail
Megjegyzés:
Ahhoz, hogy a Termékek és Rendelések táblákban generált identitásértékeket terjesztsék, a feldolgozási logika XML Bulk Load-ra van szükség, hogy nyomon kövesse ezeket az értékeket későbbi OrderDetails táblába való beillesztéshez. Ehhez az XML Bulk Load köztes táblákat hoz létre, feltölti az adatokat ezekben a táblákban, majd később eltávolítja azokat.
Egy működő minta teszteléséhez
Hozza létre a következő táblázatokat:
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)); GOHozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleSchema.xml. Hozzáadjuk ezt az XSD sémát ebbe a fájlba.
<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>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleXMLData.xml. Add hozzá a következő XML dokumentumot.
<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>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd el ValidateAndBulkload.vbs néven. Ehhez a fájlhoz add hozzá a következő VBScript kódot. Módosítsd a kapcsolati láncsort, hogy megadja a megfelelő szerver- és adatbázisnevet. Határozd meg a megfelelő útvonalat azoknak a fájloknak, amelyek paraméterként szolgálnak az Execute metódushoz.
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."Hajtsd végre a VBScript kódot. Az XML Bulk Load betölti az adatokat a megfelelő táblákba.
E. Táblázat sémák generálása tömeges betöltés előtt
Az XML Bulk Load opcionálisan generálhatja a táblákat, ha azok nem léteznek a tömeges betöltés előtt. Az SQLXMLBulkLoad objektum SchemaGen tulajdonságának TRUE-ra állításával ezt megteszi. Opcionálisan kérheted az XML Bulk Load-ot, hogy eltávolítsd a meglévő táblákat és újrahozd őket, ha az SGDropTables tulajdonságot TRUE-ra állítod. A következő VBScript példa szemlélteti ezeknek a tulajdonságoknak a használatát.
Ez a példa két további tulajdonságot is beállít a TRUE-hoz:
CheckConstraints. Ennek a tulajdonságnak a TRUE-ra állítása biztosítja, hogy a táblákba beillesztett adatok ne sértsék meg a táblákon meghatározott korlátokat (ebben az esetben a Cust és CustOrder táblák között meghatározott PRIMARY KEY/FOREIGN KEY korlátokat). Ha korlátozás megsértődik, a tömegterhelés meghibásodik.
XMLFragment. Ezt a tulajdonságot TRUE-ra kell állítani, mert a mintaXML dokumentum (adatforrás) nem tartalmaz egyetlen, felső szintű elemet (így fragmentum).
Ez a VBScript kód:
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
Egy működő minta teszteléséhez
Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleSchema.xml. Add hozzá a korábbi példában szereplő XSD sémát, amely "Lánckapcsolatok a sémában a XML tömeges betöltéséhez" című műsorban szerepel.
Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleXMLData.xml. Hozzáadjuk a korábbi példában megadott XML dokumentumot, "Lánckapcsolatok a sémában az XML tömeges betöltéséhez" fájlhoz. Távolítsd el a <ROOT> elemet a dokumentumból (hogy töredék legyen).
Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd el ValidateAndBulkload.vbs néven. Ehhez a fájlhoz add hozzá a VBScript kódot ebben a példában. Módosítsd a kapcsolati láncsort, hogy megadja a megfelelő szerver- és adatbázisnevet. Határozd meg a megfelelő útvonalat azoknak a fájloknak, amelyek paraméterként vannak megadva az Execute metódushoz.
Hajtsd végre a VBScript kódot. Az XML Bulk Load a rendelkezésre álló leképezési séma alapján hozza létre a szükséges táblákat, és tömegesen betölti az adatokat.
F. Tömeges betöltés egy patakból
Az XML Bulk Load objektummodell Execute módszere két paramétert igényel. Az első paraméter a leképezési séma fájl. A második paraméter megadja az adatbázisba betöltött XML adatokat. Kétféleképpen lehet átadni az XML adatokat az XML Bulk Load Execute módszeréhez:
A fájlnevet paraméterként adjuk meg.
Passzolj egy olyan streamet, amely tartalmazza az XML adatokat.
Ez a példa bemutatja, hogyan lehet tömeges terhelést egy folyamból.
A VBScript először egy SELECT utasítást hajt végre, hogy az ügyféladatokat a Northwind adatbázis Ügyfelek táblájából szerezze meg. Mivel a FOR XML záradék meg van jelölve (az ELEMENTS opcióval) a SELECT utasításban, a lekérdezés egy elemközpontú XML dokumentumot ad vissza az alábbi formában:
<Customer>
<CustomerID>..</CustomerID>
<CompanyName>..</CompanyName>
<City>..</City>
</Customer>
...
A szkript ezután az XML-t folyamként továbbítja az Execute metódnak második paraméterként. Az Execute metódus tömegesen betölti az adatokat a Cust táblába.
Mivel ez a szkript a SchemaGen tulajdonságot TRUE-ra, SGDropTables tulajdonságot pedig TRUE-ra állítja, az XML Bulk Load létrehozza a Cust táblát a megadott adatbázisban. (Ha a tábla már létezik, először ledobja a táblát, majd újraalkotja.)
Ez a VBScript példa:
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
Set objCmd = CreateObject("ADODB.Command")
Set objConn = CreateObject("ADODB.Connection")
Set objStrmOut = CreateObject ("ADODB.Stream")
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"
objBL.ErrorLogFile = "c:\error.log"
objBL.CheckConstraints = True
objBL.SchemaGen = True
objBL.SGDropTables = True
objBL.XMLFragment = True
' Open a connection to the instance of SQL Server to get the source data.
objConn.Open "provider=SQLOLEDB;server=(local);database=tempdb;integrated security=SSPI"
Set objCmd.ActiveConnection = objConn
objCmd.CommandText = "SELECT CustomerID, CompanyName, City FROM Customers FOR XML AUTO, ELEMENTS"
' Open the return stream and execute the command.
Const adCRLF = -1
Const adExecuteStream = 1024
objStrmOut.Open
objStrmOut.LineSeparator = adCRLF
objCmd.Properties("Output Stream").Value = objStrmOut
objCmd.Execute , , adExecuteStream
objStrmOut.Position = 0
' Execute bulk load. Read source XML data from the stream.
objBL.Execute "SampleSchema.xml", objStrmOut
Set objBL = Nothing
A következő XSD leképezési séma biztosítja a tábla létrehozásához szükséges információkat:
<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>
Ez az XDR séma ekvivalens változata:
<?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>
Stream megnyitása egy meglévő fájlon
Megnyithatsz egy streamet egy meglévő XML adatfájlon is, és átadhatod az áramlatot paraméterként az Execute metódusnak (ahelyett, hogy a fájlnevet adnád meg paraméterként).
Ez egy Visual Basic példa arra, hogyan passzol egy áramlatot paraméterként:
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
Az alkalmazás teszteléséhez használja a következő XML dokumentumot egy fájlban (SampleData.xml) és az ebben a példában található XSD sémát:
Ez az XML forrásadat (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>
Ez a megfelelő XDR-séma:
<?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. Tömeges terhelés túlcsordulás oszlopokban
Ha a leképezési séma a sql:overflow-field annotációval megad egy túlfolyó oszlopot, akkor az XML Bulk Load az összes felmerült adatot a forrásdokumentumból bemásolja ebbe az oszlopba.
Vegyük ezt az XSD sémát:
<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>
A séma egy túlfolyó oszlopot (OverflowColumn) azonosít a Cust táblához. Ennek eredményeként minden ügyfélelemre> tartozó összes fel nem használt XML-adatot< hozzáadják ebbe az oszlopba.
Megjegyzés:
Minden absztrakt elem (olyan elemek, amelyekhez az abstract="true" meg van jelölve) és minden tiltott attribútumot (olyan attribútumokat, amelyekhez a tilted="true" van megadva) az XML Bulk Load által túlcsordulásnak számít, és ha megadják a túlfolyó oszlopba, ha megadják őket. (Ellenkező esetben figyelmen kívül hagyják őket.)
Egy működő minta teszteléséhez
Hozz létre két táblát a tempdb adatbázisban:
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)); GOHozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleSchema.xml. Hozzáadjuk a példában található XSD sémát a fájlhoz.
Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleXMLData.xml. Csatoljuk a következő XML dokumentumot a fájlhoz:
<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>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd el ValidateAndBulkload.vbs néven. Ehhez a fájlhoz adjuk hozzá a következő Microsoft Visual Basic Scripting Edition (VBScript) kódot. Módosítsd a kapcsolati láncsort, hogy megadja a megfelelő szerver- és adatbázisnevet. Határozd meg a megfelelő útvonalat azoknak a fájloknak, amelyek paraméterként vannak megadva az Execute metódushoz.
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=NothingHajtsd végre a VBScript kódot.
Ez a megfelelő XDR-séma:
<?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. A fájlút meghatározása ideiglenes fájlok tranzakciós módban
Amikor tranzakciós módban tömegesen töltünk (azaz amikor a Transaction tulajdonság TRUE-ra van állítva), akkor is be kell állítanod a TempFilePath tulajdonságot, ha az alábbi feltételek közül bármelyik érvényes:
Tömegesen töltesz be egy távoli szerverre.
Egy alternatív helyi meghajtót vagy mappát szeretnél használni (nem az út, amit a TEMP környezeti változó jelöl), hogy tárold a tranzakciós módban létrehozott ideiglenes fájlokat.
Például a következő VBScript kód tömegesen tölti be az adatokat a SampleXMLData.xml fájlból az adatbázis tábláiba tranzakciós módban. A TempFilePath tulajdonság úgy van megadva, hogy beállítsa az út az ideiglenes fájlokhoz, amelyek tranzakciós módban generálódnak.
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
Megjegyzés:
Az ideiglenes fájlútnak egy megosztott helynek kell lennie, amely elérhető az SQL Server célpéldányának szolgáltatási fiókjának és a tömeges terhelésű alkalmazást futtató fióknak. Hacsak nem tölt tömegesen egy helyi szerveren, az ideiglenes fájlútnak UNC útnak kell lennie (például \\servername\sharename).
Egy működő minta teszteléséhez
Hozza létre ezt a táblázatot a tempdb adatbázisban:
USE tempdb; CREATE TABLE Cust ( CustomerID uniqueidentifier, LastName varchar(20)); GOHozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleSchema.xml. A következő XSD sémát adjuk hozzá a fájlhoz:
<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>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleXMLData.xml. Csatoljuk a következő XML dokumentumot a fájlhoz:
<ROOT> <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF" LastName="Smith" /> </ROOT>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd el ValidateAndBulkload.vbs néven. Ehhez a fájlhoz add hozzá a következő VBScript kódot. Módosítsd a kapcsolati láncsort, hogy megadja a megfelelő szerver- és adatbázisnevet. Határozd meg a megfelelő útvonalat azoknak a fájloknak, amelyek paraméterként vannak megadva az Execute metódushoz. Megadjuk a megfelelő útvonalat a TempFilePath tulajdonsághoz is.
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=NothingHajtsd végre a VBScript kódot.
A sémának meg kell határoznia a megfelelő sql:datatype típust a CustomerID attribútumhoz, amikor a CustomerID értéke egy GUID-ként van megadva, amely tartalmaz fogszabályzókat ({ és }), például:
<ROOT> <Customers CustomerID="{6F9619FF-8B86-D011-B42D-00C04FC964FF}" LastName="Smith" /> </ROOT>Ez a frissített séma:
<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>Amikor a sql:datatype egyedi azonosítóként azonosítja az oszloptípust, a tömeges betöltési művelet eltávolítja a mereveket ({ és }) a CustomerID értékből, mielőtt beillesztené azokat az oszlopba.
Ez a megfelelő XDR-séma:
<?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. Egy meglévő adatbázis-kapcsolat használata a ConnectionCommand tulajdonsággal
Egy meglévő ADO kapcsolatot használhatsz XML-t tömeges betöltéshez. Ez akkor hasznos, ha az XML Bulk Load csak egy a sok adatforráson végrehajtandó művelet közül.
A ConnectionCommand tulajdonság lehetővé teszi, hogy egy meglévő ADO kapcsolatot használj egy ADO parancsobjektum segítségével. Ezt a következő Visual Basic példa szemlélteti:
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
Egy működő minta teszteléséhez
Hozz létre két táblát a tempdb adatbázisban:
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); GOHozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleSchema.xml. A következő XSD sémát adjuk hozzá a fájlhoz:
<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>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleXMLData.xml. Csatoljuk a következő XML dokumentumot a fájlhoz:
<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>Készíts egy Visual Basic (Standard EXE) alkalmazást és az előző kódot. Ezeket a hivatkozásokat adjuk hozzá a projekthez:
Microsoft XML BulkLoad for SQL Server 4.0 Type Library Microsoft ActiveX Data objects 2.6 LibraryHajtsa végre az alkalmazást.
Ez a megfelelő XDR-séma:
<?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. Tömeges betöltés xml Data Type oszlopokban
Ha a leképezési séma xml adattípus oszlopot ad meg a sql:datatype="xml" annotációval együtt, akkor az XML Bulk Load képes átmásolni a leképezett mező XML gyermekelemeit a forrásdokumentumból ebbe az oszlopba.
Vegyük a következő XSD sémát, amely a Production.ProductModel tábla nézetét térképezi az AdventureWorks mintaadatbázisban. Ebben a táblázatban az xml adattípus CatalogDescription mezője egy Desc> elemhez van leképezve< a sql:field és sql:datatype="xml" annotációk segítségével.
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
<xsd:element name="ProductModel" sql:relation="Production.ProductModel" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xs:string"></xsd:element>
<xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProductDescription">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Summary" type="xs:anyType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="ProductModelID" sql:field="ProductModelID" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Egy működő minta teszteléséhez
Ellenőrizd, hogy az AdventureWorks mintaadatbázis telepítve van-e.
Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleSchema.xml. Másold le a fenti XSD sémát, illeszted be a fájlba, és mentsd el.
Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd SampleXMLData.xml. Kopiod le az alábbi XML dokumentumot, ragasztod be a fájlba, és elmentsd ugyanabba a mappába, amit az előző lépésnél használtak.
<ProductModel ProductModelID="2005"> <Name>Mountain-100 (2005 model)</Name> <Desc><?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?> <p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures" xmlns:html="http://www.w3.org/1999/xhtml" xmlns=""> <p1:Summary> <html:p>Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame, super-smooth front suspension, and traction for all terrain. </html:p> </p1:Summary> <p1:Manufacturer> <p1:Name>AdventureWorks</p1:Name> <p1:Copyright>2002-2005</p1:Copyright> <p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL> </p1:Manufacturer> <p1:Features>These are the product highlights. <wm:Warranty> <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod> <wm:Description>parts and labor</wm:Description> </wm:Warranty><wm:Maintenance> <wm:NoOfYears>10 years</wm:NoOfYears> <wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description> </wm:Maintenance><wf:wheel>High performance wheels.</wf:wheel><wf:saddle> <html:i>Anatomic design</html:i> and made from durable leather for a full-day of riding in comfort.</wf:saddle><wf:pedal> <html:b>Top-of-the-line</html:b> clipless pedals with adjustable tension.</wf:pedal><wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter and wall-thickness required of a premium mountain frame. The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame><wf:crankset> Triple crankset; aluminum crank arm; flawless shifting. </wf:crankset></p1:Features> <!-- add one or more of these elements... one for each specific product in this product model --> <p1:Picture> <p1:Angle>front</p1:Angle> <p1:Size>small</p1:Size> <p1:ProductPhotoID>118</p1:ProductPhotoID> </p1:Picture> <!-- add any tags in <specifications> --> <p1:Specifications> These are the product specifications. <Material>Aluminum Alloy</Material><Color>Available in most colors</Color><ProductLine>Mountain bike</ProductLine><Style>Unisex</Style><RiderExperience>Advanced to Professional riders</RiderExperience></p1:Specifications> </p1:ProductDescription> </Desc> </ProductModel>Hozz létre egy fájlt a kedvenc szövegedben vagy XML szerkesztőben, és mentsd el BulkloadXml.vbs néven. Másold le a következő VBScript kódot, és illeszted be a fájlba. Mentsék el ugyanabba a mappába, amit az előző XML adatokhoz és sémafájlokhoz használtak.
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=NothingFuttatd a BulkloadXml.vbs szkriptet.