Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Os exemplos seguintes ilustram a funcionalidade XML Bulk Load no Microsoft SQL Server. Cada exemplo fornece um esquema XSD e o seu esquema XDR equivalente.
Script Bulk Loader (ValidateAndBulkload.vbs)
O script seguinte, escrito no Microsoft Visual Basic Scripting Edition (VBScript), carrega um documento XML no XML; valida-o contra um esquema; e, se o documento for válido, executa um carregamento em massa de XML para carregar o XML numa tabela SQL Server. Este script pode ser usado com cada um dos exemplos individuais que o referem mais adiante neste tópico.
Observação
O XML Bulk Load não apresenta um aviso ou erro se nenhum conteúdo for carregado a partir do ficheiro de dados. Por isso, é uma boa prática validar o seu ficheiro de dados XML antes de executar uma operação de carregamento em massa.
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. Carregamento em massa de XML numa tabela
Este exemplo estabelece uma ligação à instância do SQL Server que é especificada na propriedade ConnectionString (MyServer). O exemplo também especifica a propriedade ErrorLogFile. Assim, a saída de erro é guardada no ficheiro especificado ("C:\error.log"), que também pode decidir alterar para outra localização. Note também que o método Execute tem como parâmetros tanto o ficheiro de esquema de mapeamento (SampleSchema.xml) como o ficheiro de dados XML (SampleXMLData.xml). Quando o carregamento em massa é executado, a tabela Cust que criou na base de dados tempdb conterá novos registos baseados no conteúdo do ficheiro de dados XML.
Para testar uma amostra de carga a granel
Crie esta tabela:
CREATE TABLE Cust(CustomerID int PRIMARY KEY, CompanyName varchar(20), City varchar(20)); GOCrie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleSchema.xml. A este ficheiro, adicione o seguinte esquema XSD:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xsd:element name="ROOT" sql:is-constant="1" > <xsd:complexType> <xsd:sequence> <xsd:element name="Customers" sql:relation="Cust" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="CustomerID" type="xsd:integer" /> <xsd:element name="CompanyName" type="xsd:string" /> <xsd:element name="City" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleXMLData.xml. A este ficheiro, adicione o seguinte documento XML:
<ROOT> <Customers> <CustomerID>1111</CustomerID> <CompanyName>Sean Chai</CompanyName> <City>New York</City> </Customers> <Customers> <CustomerID>1112</CustomerID> <CompanyName>Tom Johnston</CompanyName> <City>Los Angeles</City> </Customers> <Customers> <CustomerID>1113</CustomerID> <CompanyName>Institute of Art</CompanyName> <City>Chicago</City> </Customers> </ROOT>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como ValidateAndBulkload.vbs. A este ficheiro, adicione o código VBScript fornecido acima no início deste tópico. Modificar a cadeia de ligação para fornecer o nome do servidor apropriado. Especifique o caminho apropriado para os ficheiros que são especificados como parâmetros para o método Executar.
Execute o código VBScript. O XML Bulk Load carrega o XML na tabela Cust.
Este é o esquema XDR equivalente:
<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. Carregamento em massa de dados XML em múltiplas tabelas
Neste exemplo, o documento XML consiste nos <elementos Cliente> e <Encomenda> .
<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>
Este exemplo carrega em massa os dados XML em duas tabelas, Cust e CustOrder:
Cust(CustomerID, Nome da Empresa, Cidade)
CustOrder(OrderID, CustomerID)
O seguinte esquema XSD define a vista XML destas tabelas. O esquema especifica a relação pai-filho entre os <elementos Cliente> e <Encomenda> .
<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>
O XML Bulk Load utiliza a relação chave primária/chave estrangeira especificada acima entre os <elementos Cust> e <CustOrder> para carregar em massa os dados em ambas as tabelas.
Para testar uma amostra de carga a granel
Crie duas tabelas na base de dados tempdb :
USE tempdb; CREATE TABLE Cust( CustomerID int PRIMARY KEY, CompanyName varchar(20), City varchar(20)); CREATE TABLE CustOrder( OrderID int PRIMARY KEY, CustomerID int FOREIGN KEY REFERENCES Cust(CustomerID));Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleSchema.xml. Adicione o esquema XSD fornecido neste exemplo ao ficheiro.
Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleData.xml. Adicione o documento XML fornecido anteriormente neste exemplo ao ficheiro.
Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como ValidateAndBulkload.vbs. A este ficheiro, adicione o código VBScript fornecido acima no início deste tópico. Modificar a cadeia de ligação para fornecer o nome apropriado do servidor e da base de dados. Especifique o caminho apropriado para os ficheiros que são especificados como parâmetros para o método Executar.
Execute o código VBScript acima. O XML Bulk Load carrega o documento XML nas tabelas Cust e CustOrder.
Este é o esquema XDR equivalente:
<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. Utilização de relações em cadeia no esquema para carregar XML em massa
Este exemplo ilustra como a relação M:N especificada no esquema de mapeamento é usada pelo XML Bulk Load para carregar dados numa tabela que representa uma relação M:N.
Por exemplo, considere este esquema XSD:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="OrderOD"
parent="Ord"
parent-key="OrderID"
child="OrderDetail"
child-key="OrderID" />
<sql:relationship name="ODProduct"
parent="OrderDetail"
parent-key="ProductID"
child="Product"
child-key="ProductID"
inverse="true"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="ROOT" sql:is-constant="1" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order"
sql:relation="Ord"
sql:key-fields="OrderID" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Product"
sql:relation="Product"
sql:key-fields="ProductID"
sql:relationship="OrderOD ODProduct">
<xsd:complexType>
<xsd:attribute name="ProductID" type="xsd:int" />
<xsd:attribute name="ProductName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
O esquema especifica um <elemento Order> com um <elemento filho do Produto> . O <elemento Ordem> corresponde à tabela Ord e o <elemento Produto> à tabela Produto na base de dados. A relação de cadeia especificada no <elemento Produto> identifica uma relação M:N representada pela tabela OrderDetail. (Uma encomenda pode incluir muitos produtos, e um produto pode ser incluído em muitas encomendas.)
Quando está a carregar em massa um documento XML com este esquema, os registos são adicionados às tabelas Ord, Product e OrderDetail.
Para testar uma amostra funcional
Crie três tabelas:
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)); GOGuarde o esquema fornecido acima neste exemplo como SampleSchema.xml.
Guarde os seguintes dados XML de exemplo como 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>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como ValidateAndBulkload.vbs. A este ficheiro, adicione o código VBScript fornecido acima no início deste tópico. Modificar a cadeia de ligação para fornecer o nome apropriado do servidor e da base de dados. Descomenta as linhas seguintes do código-fonte deste exemplo.
objBL.CheckConstraints = True objBL.Transaction=TrueExecute o código VBScript. O XML Bulk Load carrega o documento XML nas tabelas Ord e Produto.
D. Carregamento em massa nas colunas de tipos de identidade
Este exemplo ilustra como o bulk load lida com colunas de tipos de identidade. No exemplo, os dados são carregados em massa em três tabelas (Ord, Product e OrderDetail).
Nestas tabelas:
OrderID na tabela Ord é uma coluna de tipo identidade
ProductID na tabela Product é uma coluna de tipo identidade.
As colunas OrderID e ProductID no OrderDetail são colunas de chave estrangeira que se referem às correspondentes colunas de chave primária nas tabelas Ord e Produto.
Seguem-se os esquemas de tabela para este exemplo:
Ord (OrderID, CustomerID)
Product (ProductID, ProductName)
OrderDetail (OrderID, ProductID)
Neste exemplo de XML Bulk Load, a propriedade KeepIdentity do modelo de objetos BulkLoad está definida como falsa. Assim, o SQL Server gera valores de identidade para as colunas ProductID e OrderID nas tabelas Product e Ord, respetivamente (quaisquer valores fornecidos nos documentos a serem carregados em massa são ignorados).
Neste caso, o XML Bulk Load identifica a relação chave primária/chave estrangeira entre as tabelas. O Bulk Load insere primeiro registos nas tabelas com a chave primária, depois propaga o valor de identidade gerado pelo SQL Server para as tabelas com colunas de chave estrangeira. No exemplo seguinte, o XML Bulk Load insere dados em tabelas nesta ordem:
Produto
Ord
OrderDetail
Observação
Para propagar os valores de identidade gerados nas tabelas de Produtos e Encomendas, a lógica de processamento requer o XML Bulk Load para acompanhar estes valores para posterior inserção na tabela OrderDetails. Para isso, o XML Bulk Load cria tabelas intermédias, preenche os dados dessas tabelas e depois remove-os.
Para testar uma amostra funcional
Crie estas tabelas:
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)); GOCrie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleSchema.xml. Adicione este esquema XSD a este ficheiro.
<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>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleXMLData.xml. Adicione o seguinte documento XML.
<ROOT> <Order OrderID="11" CustomerID="ALFKI"> <Product ProductID="11" ProductName="Chai" /> <Product ProductID="22" ProductName="Chang" /> </Order> <Order OrderID="22" CustomerID="ANATR"> <Product ProductID="33" ProductName="Aniseed Syrup" /> <Product ProductID="44" ProductName="Gumbo Mix" /> </Order> </ROOT>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como ValidateAndBulkload.vbs. A este ficheiro, adicione o seguinte código VBScript. Modificar a cadeia de ligação para fornecer o nome apropriado do servidor e da base de dados. Especifique o caminho apropriado para os ficheiros que servem como parâmetros para o método Executar .
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."Execute o código VBScript. O XML Bulk Load irá carregar os dados nas tabelas apropriadas.
E. Geração de esquemas de tabela antes do carregamento em massa
O XML Bulk Load pode opcionalmente gerar as tabelas se estas não existirem antes do bulk loading. Definir a propriedade SchemaGen do objeto SQLXMLBulkLoad para TRUE faz isto. Também pode, opcionalmente, solicitar ao XML Bulk Load para eliminar quaisquer tabelas existentes e recriá-las, definindo a propriedade SGDropTables para TRUE. O exemplo seguinte do VBScript ilustra a utilização destas propriedades.
Além disso, este exemplo define duas propriedades adicionais para TRUE:
VerificarLimitações. Definir esta propriedade como TRUE garante que os dados inseridos nas tabelas não violam quaisquer restrições especificadas nas tabelas (neste caso, as restrições de CHAVE PRIMÁRIA/CHAVE ESTRANGEIRA especificadas entre as tabelas Cust e CustOrder). Se houver uma violação de restrição, a carga em massa falha.
XMLFragment. Esta propriedade deve ser definida como TRUE porque o documento XML de exemplo (fonte de dados) não contém um único elemento de topo (e, portanto, é um fragmento).
Este é o código VBScript:
Dim objBL
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"
objBL.ErrorLogFile = "c:\error.log"
objBL.CheckConstraints=true
objBL.XMLFragment = True
objBL.SchemaGen = True
objBL.SGDropTables = True
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"
Set objBL = Nothing
Para testar uma amostra funcional
Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleSchema.xml. Adicione o esquema XSD fornecido no exemplo anterior, "Usando relações de cadeia no esquema para carregar XML em massa", ao ficheiro.
Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleXMLData.xml. Adicione ao ficheiro o documento XML fornecido no exemplo anterior, "Usando relações de cadeia no esquema para carregar XML em massa", ao ficheiro. Remova o <elemento ROOT> do documento (para o tornar um fragmento).
Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como ValidateAndBulkload.vbs. A este ficheiro, adicione o código VBScript neste exemplo. Modificar a cadeia de ligação para fornecer o nome apropriado do servidor e da base de dados. Especifique o caminho apropriado para os ficheiros que são especificados como parâmetros para o método Executar.
Execute o código VBScript. O XML Bulk Load cria as tabelas necessárias com base no esquema de mapeamento fornecido e carrega em massa os dados nelas incluídos.
F. Carregamento em massa a partir de um curso de água
O método de execução do modelo de objetos XML Bulk Load assume dois parâmetros. O primeiro parâmetro é o ficheiro de esquema de mapeamento. O segundo parâmetro fornece os dados XML que devem ser carregados na base de dados. Existem duas formas de passar os dados XML para o método de execução do XML Bulk Load:
Especifique o nome do ficheiro como parâmetro.
Passe um fluxo que contenha os dados XML.
Este exemplo ilustra como fazer carga em massa a partir de um fluxo.
O VBScript executa primeiro uma instrução SELECT para recuperar informações do cliente da tabela Customers na base de dados Northwind. Como a cláusula FOR XML está especificada (com a opção ELEMENTS) na instrução SELECT, a consulta devolve um documento XML centrado em elementos desta forma:
<Customer>
<CustomerID>..</CustomerID>
<CompanyName>..</CompanyName>
<City>..</City>
</Customer>
...
O script passa então o XML como um fluxo para o método Execute como segundo parâmetro. O método Executar carrega em massa os dados na tabela Cust.
Como este script define a propriedade SchemaGen como TRUE e a propriedade SGDropTables como TRUE, o XML Bulk Load cria a tabela Cust na base de dados especificada. (Se a tabela já existir, primeiro remove a tabela e depois recria-a.)
Este é o exemplo do VBScript:
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
Set objCmd = CreateObject("ADODB.Command")
Set objConn = CreateObject("ADODB.Connection")
Set objStrmOut = CreateObject ("ADODB.Stream")
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"
objBL.ErrorLogFile = "c:\error.log"
objBL.CheckConstraints = True
objBL.SchemaGen = True
objBL.SGDropTables = True
objBL.XMLFragment = True
' Open a connection to the instance of SQL Server to get the source data.
objConn.Open "provider=SQLOLEDB;server=(local);database=tempdb;integrated security=SSPI"
Set objCmd.ActiveConnection = objConn
objCmd.CommandText = "SELECT CustomerID, CompanyName, City FROM Customers FOR XML AUTO, ELEMENTS"
' Open the return stream and execute the command.
Const adCRLF = -1
Const adExecuteStream = 1024
objStrmOut.Open
objStrmOut.LineSeparator = adCRLF
objCmd.Properties("Output Stream").Value = objStrmOut
objCmd.Execute , , adExecuteStream
objStrmOut.Position = 0
' Execute bulk load. Read source XML data from the stream.
objBL.Execute "SampleSchema.xml", objStrmOut
Set objBL = Nothing
O seguinte esquema de mapeamento XSD fornece a informação necessária para criar a tabela:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="ROOT" sql:is-constant="true" >
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Customers"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Customers" sql:relation="Cust" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerID"
type="xsd:string"
sql:datatype="nvarchar(5)"/>
<xsd:element name="CompanyName"
type="xsd:string"
sql:datatype="nvarchar(40)"/>
<xsd:element name="City"
type="xsd:string"
sql:datatype="nvarchar(40)"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Este é o esquema XDR equivalente:
<?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>
Abrir um fluxo num ficheiro existente
Também pode abrir um fluxo num ficheiro de dados XML existente e passar o fluxo como parâmetro ao método Executar (em vez de passar o nome do ficheiro como parâmetro).
Este é um exemplo em Visual Basic de passar um fluxo como parâmetro:
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
Para testar a aplicação, use o seguinte documento XML num ficheiro (SampleData.xml) e o esquema XSD fornecido neste exemplo:
Esta é a fonte de dados XML (SampleData.xml):
<ROOT>
<Customers>
<CustomerID>1111</CustomerID>
<CompanyName>Hanari Carnes</CompanyName>
<City>NY</City>
<Order OrderID="1" />
<Order OrderID="2" />
</Customers>
<Customers>
<CustomerID>1112</CustomerID>
<CompanyName>Toms Spezialitten</CompanyName>
<City>LA</City>
<Order OrderID="3" />
</Customers>
<Customers>
<CustomerID>1113</CustomerID>
<CompanyName>Victuailles en stock</CompanyName>
<Order CustomerID= "4444" OrderID="4" />
</Customers>
</ROOT>
Este é o esquema XDR equivalente:
<?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. Carregamento em granel em colunas de transbordo
Se o esquema de mapeamento especificar uma coluna de overflow usando a anotação sql:overflow-field , o XML Bulk Load copia todos os dados não consumidos do documento de origem para esta coluna.
Considere este esquema XSD:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustCustOrder"
parent="Cust"
parent-key="CustomerID"
child="CustOrder"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customers" sql:relation="Cust"
sql:overflow-field="OverflowColumn" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerID" type="xsd:integer" />
<xsd:element name="CompanyName" type="xsd:string" />
<xsd:element name="City" type="xsd:string" />
<xsd:element name="Order"
sql:relation="CustOrder"
sql:relationship="CustCustOrder" >
<xsd:complexType>
<xsd:attribute name="OrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
O esquema identifica uma coluna de overflow (OverflowColumn) para a tabela Cust. Como resultado, todos os dados XML não consumidos para cada <elemento Cliente> são adicionados a esta coluna.
Observação
Todos os elementos abstratos (elementos para os quais abstract="true" é especificado) e todos os atributos proibidos (atributos para os quais proibid="true " é especificado) são considerados overflow pelo XML Bulk Load e são adicionados à coluna de overflow, se especificados. (Caso contrário, são ignorados.)
Para testar uma amostra funcional
Crie duas tabelas na base de dados tempdb :
USE tempdb; CREATE TABLE Cust ( CustomerID int PRIMARY KEY, CompanyName varchar(20) NOT NULL, City varchar(20) DEFAULT 'Seattle', OverflowColumn nvarchar(200)); GO CREATE TABLE CustOrder ( OrderID int PRIMARY KEY, CustomerID int FOREIGN KEY REFERENCES Cust(CustomerID)); GOCrie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleSchema.xml. Adicione o esquema XSD fornecido neste exemplo ao ficheiro.
Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleXMLData.xml. Adicione o seguinte documento XML ao ficheiro:
<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>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como ValidateAndBulkload.vbs. A este ficheiro, adicione o seguinte código Microsoft Visual Basic Scripting Edition (VBScript). Modificar a cadeia de ligação para fornecer o nome apropriado do servidor e da base de dados. Especifique o caminho apropriado para os ficheiros que são especificados como parâmetros para o método Executar.
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=NothingExecute o código VBScript.
Este é o esquema XDR equivalente:
<?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. Especificação do caminho do ficheiro para ficheiros temporários em modo de transação
Quando está a carregar em massa no modo de transação (ou seja, quando a propriedade Transação está definida como TRUE), também deve definir a propriedade TempFilePath quando qualquer uma das seguintes condições for verdadeira:
Estás a carregar em massa para um servidor remoto.
Deves usar um disco ou pasta local alternativo (um diferente do caminho especificado pela variável de ambiente TEMP) para armazenar os ficheiros temporários criados no modo de transação.
Por exemplo, o seguinte código VBScript carrega em massa dados do ficheiro SampleXMLData.xml para as tabelas da base de dados em modo de transação. A propriedade TempFilePath é especificada para definir o caminho dos ficheiros temporários gerados em modo de transação.
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
Observação
O caminho temporário do ficheiro deve ser uma localização partilhada acessível à conta de serviço da instância alvo do SQL Server e à conta que está a executar a aplicação de carregamento em massa. A menos que estejas a carregar em massa num servidor local, o caminho temporário do ficheiro tem de ser um caminho UNC (como \\nomedo do servidor\nome partilhar).
Para testar uma amostra funcional
Crie esta tabela na base de dados tempdb :
USE tempdb; CREATE TABLE Cust ( CustomerID uniqueidentifier, LastName varchar(20)); GOCrie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleSchema.xml. Adicione o seguinte esquema XSD ao ficheiro:
<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>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleXMLData.xml. Adicione o seguinte documento XML ao ficheiro:
<ROOT> <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF" LastName="Smith" /> </ROOT>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como ValidateAndBulkload.vbs. A este ficheiro, adicione o seguinte código VBScript. Modificar a cadeia de ligação para fornecer o nome apropriado do servidor e da base de dados. Especifique o caminho apropriado para os ficheiros que são especificados como parâmetros para o método Executar. Especifique também o caminho apropriado para a propriedade 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=NothingExecute o código VBScript.
O esquema deve especificar o tipo sql:datatype correspondente para o atributo CustomerID quando o valor do CustomerID é especificado como um GUID que inclui colchetes ({ e }), tais como:
<ROOT> <Customers CustomerID="{6F9619FF-8B86-D011-B42D-00C04FC964FF}" LastName="Smith" /> </ROOT>Este é o esquema atualizado:
<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>Quando o tipo sql:datatype é especificado identificando o tipo de coluna como uniqueidentifier, a operação de bulk load remove os colchetes ({ e }) do valor CustomerID antes de o inserir na coluna.
Este é o esquema XDR equivalente:
<?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. Usar uma ligação de base de dados existente com a propriedade ConnectionCommand
Podes usar uma ligação ADO existente para carregar XML em massa. Isto é útil se o XML Bulk Load for apenas uma das muitas operações que serão realizadas numa fonte de dados.
A propriedade ConnectionCommand permite-lhe usar uma ligação ADO existente utilizando um objeto de comando ADO. Isto é ilustrado no seguinte exemplo do Visual Basic:
Private Sub Form_Load()
Dim objBL As New SQLXMLBulkLoad4
Dim objCmd As New ADODB.Command
Dim objConn As New ADODB.Connection
'Open a connection to an instance of SQL Server.
objConn.Open "provider=SQLOLEDB;data source=(local);database=tempdb;integrated security=SSPI"
'Ask the Command object to use the connection just established.
Set objCmd.ActiveConnection = objConn
'Tell Bulk Load to use the active command object that is using the Connection obj.
objBL.ConnectionCommand = objCmd
objBL.ErrorLogFile = "c:\error.log"
objBL.CheckConstraints = True
'The Transaction property must be set to True if you use ConnectionCommand.
objBL.Transaction = True
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"
Set objBL = Nothing
End Sub
Para testar uma amostra funcional
Crie duas tabelas na base de dados tempdb :
USE tempdb; CREATE TABLE Cust( CustomerID varchar(5) PRIMARY KEY, CompanyName varchar(30), City varchar(20)); GO CREATE TABLE CustOrder( CustomerID varchar(5) references Cust (CustomerID), OrderID varchar(5) PRIMARY KEY); GOCrie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleSchema.xml. Adicione o seguinte esquema XSD ao ficheiro:
<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>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleXMLData.xml. Adicione o seguinte documento XML ao ficheiro:
<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>Crie uma aplicação Visual Basic (EXE Padrão) e o código anterior. Adicione estas referências ao projeto:
Microsoft XML BulkLoad for SQL Server 4.0 Type Library Microsoft ActiveX Data objects 2.6 LibraryExecute o aplicativo.
Este é o esquema XDR equivalente:
<?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. Carregamento em massa em colunas de Tipos de Dados xml
Se o esquema de mapeamento especificar uma coluna de tipo de dado xml usando a anotação sql:datatype="xml ", o XML Bulk Load pode copiar elementos filhos XML para o campo mapeado do documento de origem para esta coluna.
Considere o seguinte esquema XSD, que mapeia uma vista da tabela Production.ProductModel na base de dados de exemplos AdventureWorks. Nesta tabela, o campo CatalogDescription do tipo de dados xml é mapeado para um <elemento Desc> usando as anotações sql:field e sql:datatype="xml ".
<?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>
Para testar uma amostra funcional
Verifique se a base de dados de exemplos do AdventureWorks está instalada.
Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleSchema.xml. Copia o esquema XSD acima, cola-o no ficheiro e guarda-o.
Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como SampleXMLData.xml. Copie o seguinte documento XML abaixo, cole-o no ficheiro e guarde-o na mesma pasta usada na etapa anterior.
<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>Crie um ficheiro no seu editor de texto ou XML preferido e guarde-o como BulkloadXml.vbs. Copie o seguinte código VBScript e cole-o no ficheiro. Guarde-o na mesma pasta que era usado para os dados XML anteriores e ficheiros de esquema.
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=NothingExecute o script BulkloadXml.vbs.