Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
De volgende voorbeelden illustreren de XML Bulk Load-functionaliteit in Microsoft SQL Server. Elk voorbeeld geeft een XSD-schema en het bijbehorende XDR-schema.
Bulk Loader-script (ValidateAndBulkload.vbs)
Het volgende script, geschreven in de Microsoft Visual Basic Scripting Edition (VBScript), laadt een XML-document in de XML DOM; valideert het tegen een schema; en, als het document geldig is, voert het een XML-bulk uit om de XML in een SQL Server-tabel te laden. Dit script kan later in dit onderwerp worden gebruikt met elk van de individuele voorbeelden die ernaar verwijzen.
Opmerking
XML Bulk Load geeft geen waarschuwing of foutmelding als er geen inhoud uit het databestand wordt geüpload. Daarom is het verstandig om je XML-databestand te valideren voordat je een bulkload uitvoert.
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
Eén. XML in bulk laden in een tabel
Dit voorbeeld legt een verbinding tot stand met de instantie van SQL Server die is gespecificeerd in de ConnectionString-eigenschap (MyServer). Het voorbeeld specificeert ook de eigenschap ErrorLogFile. Daarom wordt de foutuitvoer opgeslagen in het opgegeven bestand ("C:\error.log"), dat je mogelijk ook naar een andere locatie kunt verplaatsen. Let ook op dat de Execute-methode als parameters zowel het mapping schema-bestand (SampleSchema.xml) als het XML-databestand (SampleXMLData.xml). Wanneer de bulk load wordt uitgevoerd, bevat de Cust-tabel die je hebt aangemaakt in de tempdb-database nieuwe records gebaseerd op de inhoud van het XML-databestand.
Om een monster bulklading te testen
Maak deze tabel:
CREATE TABLE Cust(CustomerID int PRIMARY KEY, CompanyName varchar(20), City varchar(20)); GOMaak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg aan dit bestand het volgende XSD-schema toe:
<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>Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg aan dit bestand het volgende XML-document toe:
<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>Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de VBScript-code toe die hierboven aan het begin van dit onderwerp wordt gegeven. Pas de verbindingsstring aan om de juiste servernaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd.
Voer de VBScript-code uit. XML Bulk Load laadt de XML in de Cust-tabel.
Dit is het equivalente XDR-schema:
<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. Bulkladen van XML-gegevens in meerdere tabellen
In dit voorbeeld bestaat het XML-document uit de <elementen Klant> en <Bestelling> .
<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>
Dit voorbeeld laadt de XML-gegevens in bulk in twee tabellen, Cust en CustOrder:
Cust(KlantID, Bedrijfsnaam, Stad)
CustOrder(OrderID, CustomerID)
Het volgende XSD-schema definieert de XML-weergave van deze tabellen. Het schema specificeert de ouder-kindrelatie tussen de elementen Klant<> en <Order>.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustCustOrder"
parent="Cust"
parent-key="CustomerID"
child="CustOrder"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="ROOT" sql:is-constant="1" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Customers" sql:relation="Cust" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerID" type="xsd:integer" />
<xsd:element name="CompanyName" type="xsd:string" />
<xsd:element name="City" type="xsd:string" />
<xsd:element name="Order"
sql:relation="CustOrder"
sql:relationship="CustCustOrder" >
<xsd:complexType>
<xsd:attribute name="OrderID" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
XML Bulk Load gebruikt de primaire sleutel/vreemde sleutelrelatie zoals hierboven gespecificeerd tussen de <Cust-> en <CustOrder-elementen> om de data in bulk in beide tabellen te laden.
Om een monster bulklading te testen
Maak twee tabellen aan in de tempdb-database :
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));Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het XSD-schema dat in dit voorbeeld wordt gegeven toe aan het bestand.
Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleData.xml. Voeg het XML-document dat eerder in dit voorbeeld werd verstrekt toe aan het bestand.
Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de VBScript-code toe die hierboven aan het begin van dit onderwerp wordt gegeven. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd.
Voer de hierboven genoemde VBScript-code uit. XML Bulk Load laadt het XML-document in de tabellen Cust en CustOrder.
Dit is het equivalente XDR-schema:
<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. Het gebruik van ketenrelaties in het schema om XML bulk te laden
Dit voorbeeld illustreert hoe de M:N-relatie die in het mappingschema is gespecificeerd, door XML Bulk Load wordt gebruikt om data te laden in een tabel die een M:N-relatie vertegenwoordigt.
Denk bijvoorbeeld aan dit XSD-schema:
<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>
Het schema specificeert een <Order-element> met een <product-kindelement> . Het <Order-element> wordt gekoppeld aan de Ord-tabel en het <Product-element> aan de Product-tabel in de database. De ketenrelatie die op het <productelement> wordt gespecificeerd, identificeert een M:N-relatie die wordt weergegeven door de OrderDetail-tabel. (Een bestelling kan veel producten bevatten, en een product kan in meerdere bestellingen worden opgenomen.)
Wanneer je een XML-document bulkload met dit schema, worden records toegevoegd aan de tabellen Ord, Product en OrderDetail.
Om een werkmonster te testen
Maak drie tabellen:
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)); GOBewaar het schema dat hierboven in dit voorbeeld wordt gegeven als SampleSchema.xml.
Sla de volgende voorbeeld-XML-gegevens op als 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>Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de VBScript-code toe die hierboven aan het begin van dit onderwerp wordt gegeven. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Verwijder de volgende regels uit de broncode voor dit voorbeeld.
objBL.CheckConstraints = True objBL.Transaction=TrueVoer de VBScript-code uit. XML Bulk Load laadt het XML-document in de Ord- en Product-tabellen.
D. Bulkbelasting in identiteitstypekolommen
Dit voorbeeld illustreert hoe bulk load omgaat met kolommen van identiteitstype. In het voorbeeld wordt de data in bulk geladen in drie tabellen (Ord, Product en OrderDetail).
In deze tabellen:
OrderID in de Ord-tabel is een kolom voor identiteitstype
ProductID in de producttabel is een kolom voor identiteitstype.
OrderID- en ProductID-kolommen in de OrderDetail zijn kolommen voor vreemde sleutels die verwijzen naar de overeenkomstige primaire sleutelkolommen in de Ord- en Product-tabellen.
De volgende zijn de tabelschema's voor dit voorbeeld:
Ord (OrderID, CustomerID)
Product (ProductID, ProductName)
OrderDetail (OrderID, ProductID)
In dit voorbeeld van XML Bulk Load is de eigenschap KeepIdentity van het BulkLoad-objectmodel op false gezet. Daarom genereert SQL Server identiteitswaarden voor de kolommen ProductID en OrderID in respectievelijk de Product- en Ord-tabellen (alle waarden die in de documenten worden opgegeven die in bulk geladen moeten worden, worden genegeerd).
In dit geval identificeert XML Bulk Load de relatie tussen primaire sleutel en vreemde sleutel tussen tabellen. Bulk Load voegt eerst records in de tabellen in met de primaire sleutel, en verspreidt vervolgens de identiteitswaarde die door SQL Server wordt gegenereerd naar de tabellen met kolommen van vreemde sleutels. In het volgende voorbeeld voegt XML Bulk Load gegevens in tabellen in deze volgorde:
Product
Ord
OrderDetail
Opmerking
Om identiteitswaarden die in de Products- en Orders-tabellen worden gegenereerd te kunnen verspreiden, vereist de verwerkingslogica XML Bulk Load om deze waarden bij te houden voor latere invoeging in de OrderDetails-tabel. Om dat te doen, maakt XML Bulk Load tussenliggende tabellen, vult de data in deze tabellen en verwijdert ze later.
Om een werkmonster te testen
Maak deze tabellen:
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)); GOMaak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg dit XSD-schema toe aan dit bestand.
<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>Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het volgende XML-document toe.
<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>Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de volgende VBScript-code toe. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters dienen voor de Execute-methode .
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."Voer de VBScript-code uit. De XML Bulk Load laadt de gegevens in de juiste tabellen.
E. Tabelschema's genereren vóór bulkladen
XML Bulk Load kan optioneel de tabellen genereren als ze niet bestaan vóór bulk loading. Het instellen van de SchemaGen-eigenschap van het SQLXMLBulkLoad-object op TRUE doet dit. Je kunt ook optioneel XML Bulk Load aanvragen om bestaande tabellen te verwijderen en opnieuw aan te maken door de SGDropTables-eigenschap op TRUE te zetten. Het volgende VBScript-voorbeeld illustreert het gebruik van deze eigenschappen.
Ook zet dit voorbeeld twee extra eigenschappen op WAAR:
CheckConstraints. Door deze eigenschap op WAAR te zetten, wordt ervoor gezorgd dat de gegevens die in de tabellen worden ingevoegd geen beperkingen schendt die op de tabellen zijn gespecificeerd (in dit geval de PRIMAIRE SLEUTEL/VREEMDE SLEUTEL-beperkingen die zijn gespecificeerd tussen de Cust- en CustOrder-tabellen). Als er sprake is van een schending van de beperking, faalt de bulkbelasting.
XMLFragment. Deze eigenschap moet op WAAR worden gezet omdat het voorbeeld-XML-document (databron) geen enkel, top-level element bevat (en dus een fragment is).
Dit is de VBScript-code:
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
Om een werkmonster te testen
Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het XSD-schema toe dat in het eerdere voorbeeld, "Using chain relationships in the schema to bulk load XML", aan het bestand.
Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het XML-document toe dat in het eerdere voorbeeld, "Using chain relationships in the schema to bulk load XML", aan het bestand. Verwijder het <ROOT-element> uit het document (om het een fragment te maken).
Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de VBScript-code toe in dit voorbeeld. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd.
Voer de VBScript-code uit. De XML Bulk Load maakt de benodigde tabellen op basis van het geleverde mappingschema en laadt de data daarin in bulk.
F. Bulkbelasting vanuit een stroom
De Execute-methode van het XML Bulk Load-objectmodel gebruikt twee parameters. De eerste parameter is het mapping schema-bestand. De tweede parameter levert de XML-gegevens die in de database geladen moeten worden. Er zijn twee manieren om de XML-gegevens door te geven aan de Execute-methode van XML Bulk Load:
Geef de bestandsnaam als parameter op.
Geef een stroom door die de XML-data bevat.
Dit voorbeeld illustreert hoe je bulk kunt laden vanuit een stroom.
VBScript voert eerst een SELECT-instructie uit om klantinformatie op te halen uit de Customers-tabel in de Northwind-database. Omdat de FOR XML-clausule is gespecificeerd (met de ELEMENTS-optie) in de SELECT-instructie, levert de query een element-centrisch XML-document van deze vorm terug:
<Customer>
<CustomerID>..</CustomerID>
<CompanyName>..</CompanyName>
<City>..</City>
</Customer>
...
Het script geeft vervolgens de XML als stroom door aan de Execute-methode als tweede parameter. De Execute-methode laadt de data bulk in de Cust-tabel.
Omdat dit script de SchemaGen-eigenschap op TRUE zet en de SGDropTables-eigenschap op TRUE, maakt XML Bulk Load de Cust-tabel aan in de opgegeven database. (Als de tabel al bestaat, wordt de tabel eerst gedropt en vervolgens opnieuw aangemaakt.)
Dit is het VBScript-voorbeeld:
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
Het volgende XSD-mappingschema biedt de benodigde informatie om de tabel te maken:
<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>
Dit is het equivalente XDR-schema:
<?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>
Een stream openen op een bestaand bestand
Je kunt ook een stream openen op een bestaand XML-databestand en de stream als parameter doorgeven aan de Execute-methode (in plaats van de bestandsnaam als parameter).
Dit is een Visual Basic-voorbeeld van het doorgeven van een stroom als de parameter:
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
Om de applicatie te testen, gebruik je het volgende XML-document in een bestand (SampleData.xml) en het XSD-schema dat in dit voorbeeld wordt geleverd:
Dit is de XML-brongegevens (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>
Dit is het equivalente XDR-schema:
<?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. Bulkbelasting in overloopkolommen
Als het mappingschema een overflow-kolom specificeert met behulp van de sql:overflow-field-annotatie , kopieert XML Bulk Load alle niet-gebruikte data uit het brondocument naar deze kolom.
Beschouw dit XSD-schema:
<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>
Het schema identificeert een overflowkolom (OverflowColumn) voor de Cust-tabel. Als gevolg hiervan worden alle niet-gebruikte XML-gegevens voor elk <Klant-element> aan deze kolom toegevoegd.
Opmerking
Alle abstracte elementen (elementen waarvoor abstract="waar" is gespecificeerd) en alle verboden attributen (attributen waarvoor verboden="waar" is gespecificeerd) worden door XML Bulk Load als overflow beschouwd en worden toegevoegd aan de kolom overflow, indien gespecificeerd. (Anders worden ze genegeerd.)
Om een werkmonster te testen
Maak twee tabellen aan in de tempdb-database :
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)); GOMaak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het XSD-schema dat in dit voorbeeld wordt gegeven toe aan het bestand.
Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het volgende XML-document toe aan het bestand:
<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>Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de volgende Microsoft Visual Basic Scripting Edition (VBScript) code toe. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd.
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=NothingVoer de VBScript-code uit.
Dit is het equivalente XDR-schema:
<?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. Het specificeren van het bestandspad voor tijdelijke bestanden in transactiemodus
Wanneer je bulk laadt in transactiemodus (dat wil zeggen, wanneer de Transaction-eigenschap op TRUE is gezet), moet je ook de TempFilePath-eigenschap instellen wanneer een van de volgende voorwaarden waar is:
Je laadt bulk naar een externe server.
Je wilt een alternatieve lokale schijf of map gebruiken (een andere dan het pad dat door de TEMP-omgevingsvariabele is gespecificeerd) om de tijdelijke bestanden op te slaan die in de transactiemodus worden aangemaakt.
Bijvoorbeeld, de volgende VBScript-code laadt bulk data uit het SampleXMLData.xml-bestand in de databasetabellen in transactiemodus. De eigenschap TempFilePath wordt gespecificeerd om het pad in te stellen voor de tijdelijke bestanden die in transactiemodus worden gegenereerd.
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
Opmerking
Het tijdelijke bestandspad moet een gedeelde locatie zijn die toegankelijk is voor het serviceaccount van de doelinstantie van SQL Server en voor het account dat de bulk load-applicatie draait. Tenzij je bulk load op een lokale server gebruikt, moet het tijdelijke bestandspad een UNC-pad zijn (zoals \\servername\sharename).
Om een werkmonster te testen
Maak deze tabel aan in de tempdb-database :
USE tempdb; CREATE TABLE Cust ( CustomerID uniqueidentifier, LastName varchar(20)); GOMaak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het volgende XSD-schema toe aan het bestand:
<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>Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het volgende XML-document toe aan het bestand:
<ROOT> <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF" LastName="Smith" /> </ROOT>Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de volgende VBScript-code toe. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd. Specificeer ook het juiste pad voor de eigenschap TempFilePath.
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0") objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI" objBL.ErrorLogFile = "c:\error.log" objBL.CheckConstraints = True objBL.Transaction=True objBL.TempFilePath="\\server\folder" objBL.Execute "SampleSchema.xml", "SampleXMLData.xml" set objBL=NothingVoer de VBScript-code uit.
Het schema moet het bijbehorende sql:datatype specificeren voor het CustomerID-attribuut wanneer de waarde voor CustomerID wordt opgegeven als een GUID die haakjes ({ en } bevat, zoals:
<ROOT> <Customers CustomerID="{6F9619FF-8B86-D011-B42D-00C04FC964FF}" LastName="Smith" /> </ROOT>Dit is het bijgewerkte schema:
<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>Wanneer sql:datatype wordt gespecificeerd en het kolomtype als uniqueidentifier identificeert, verwijdert de bulkload-operatie de hakjes ({ en }) uit de CustomerID-waarde voordat deze in de kolom wordt ingevoegd.
Dit is het equivalente XDR-schema:
<?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. Een bestaande databaseverbinding gebruiken met de eigenschap ConnectionCommand
Je kunt een bestaande ADO-verbinding gebruiken om XML bulk te laden. Dit is nuttig als XML Bulk Load slechts één van de vele bewerkingen is die op een databron worden uitgevoerd.
De ConnectionCommand-eigenschap stelt je in staat een bestaande ADO-verbinding te gebruiken door een ADO-commando-object te gebruiken. Dit wordt geïllustreerd in het volgende Visual Basic-voorbeeld:
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
Om een werkmonster te testen
Maak twee tabellen aan in de tempdb-database :
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); GOMaak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het volgende XSD-schema toe aan het bestand:
<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>Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het volgende XML-document toe aan het bestand:
<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>Maak een Visual Basic (Standard EXE) applicatie en de voorgaande code. Voeg deze verwijzingen toe aan het project:
Microsoft XML BulkLoad for SQL Server 4.0 Type Library Microsoft ActiveX Data objects 2.6 LibraryVoer de toepassing uit.
Dit is het equivalente XDR-schema:
<?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. Bulkladen in xml Data Type kolommen
Als het mappingschema een xml-datatypekolom specificeert door gebruik te maken van de sql:datatype="xml" annotatie, kan XML Bulk Load XML-kindelementen voor het gemapte veld van het brondocument naar deze kolom kopiëren.
Overweeg het volgende XSD-schema, dat een weergave van de Production.ProductModel-tabel in de AdventureWorks-voorbeelddatabase in kaart brengt. In deze tabel wordt het CatalogDescription-veld van xml-datatype gekoppeld aan een <Desc-element> met behulp van de sql:field en sql:datatype="xml" annotaties.
<?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>
Om een werkmonster te testen
Controleer of de AdventureWorks-voorbeelddatabase is geïnstalleerd.
Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Kopieer het bovenstaande XSD-schema, plak het in het bestand en sla het op.
Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Kopieer het volgende XML-document hieronder, plak het in het bestand en sla het op in dezelfde map als voor de vorige stap.
<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>Maak een bestand aan in je voorkeurstekst- of XML-editor en sla het op als BulkloadXml.vbs. Kopieer de volgende VBScript-code en plak deze in het bestand. Sla het op in dezelfde map als gebruikt voor de vorige XML-data en schemabestanden.
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=NothingVoer het BulkloadXml.vbs-script uit.