Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os exemplos a seguir ilustram a funcionalidade de Carregamento em Massa XML no Microsoft SQL Server. Cada exemplo fornece um esquema XSD e seu esquema XDR equivalente.
Script do Carregador em Massa (ValidateAndBulkload.vbs)
O script a seguir, escrito no Microsoft Visual Basic Scripting Edition (VBScript), carrega um documento XML no DOM XML; valida-o em relação a um esquema; e, se o documento for válido, executará uma carga em massa XML para carregar o XML em uma tabela do SQL Server. Esse script pode ser usado com cada um dos exemplos individuais que se referem a ele posteriormente neste tópico.
Observação
O Carregamento em Massa XML não gerará um aviso ou um erro se nenhum conteúdo for carregado do arquivo de dados. Portanto, é uma boa prática validar seu arquivo 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
Um. Carregando XML em massa em uma tabela
Este exemplo estabelece uma conexão com a instância do SQL Server especificada na propriedade ConnectionString (MyServer). O exemplo também especifica a propriedade ErrorLogFile. Portanto, a saída de erro é salva no arquivo especificado ("C:\error.log"), que você também pode decidir alterar para um local diferente. Observe também que o método Execute tem como parâmetros o arquivo de esquema de mapeamento (SampleSchema.xml) e o arquivo de dados XML (SampleXMLData.xml). Quando a carga em massa for executada, a tabela Cust criada no banco de dados tempdb conterá novos registros com base no conteúdo do arquivo de dados XML.
Para testar uma carga em massa de exemplo
Crie esta tabela:
CREATE TABLE Cust(CustomerID int PRIMARY KEY, CompanyName varchar(20), City varchar(20)); GOCrie um arquivo em seu texto preferencial ou editor XML e salve-o como SampleSchema.xml. A este arquivo, 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 arquivo em seu texto preferencial ou editor XML e salve-o como SampleXMLData.xml. A este arquivo, 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 arquivo em seu editor XML ou texto preferencial e salve-o como ValidateAndBulkload.vbs. A esse arquivo, adicione o código VBScript fornecido acima no início deste tópico. Modifique a cadeia de conexão para fornecer o nome do servidor apropriado. Especifique o caminho apropriado para os arquivos especificados como parâmetros para o método Execute.
Execute o código VBScript. O Carregamento em Massa XML carrega o XML na tabela Cust.
Esse é 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>
B. Carregando dados XML em massa em várias tabelas
Neste exemplo, o documento XML consiste nos <elementos Cliente> e <Pedido> .
<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, CompanyName, City)
CustOrder(OrderID, CustomerID)
O esquema XSD a seguir define a exibição XML dessas tabelas. O esquema especifica a relação pai-filho entre os <elementos Cliente> e <Pedido> .
<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 Carregamento em Massa XML usa a relação chave primária/chave estrangeira especificada acima entre os <elementos Cust> e <CustOrder> para carregar os dados em massa em ambas as tabelas.
Para testar uma carga em massa de exemplo
Crie duas tabelas no banco 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 arquivo em seu texto preferencial ou editor XML e salve-o como SampleSchema.xml. Adicione o esquema XSD fornecido neste exemplo ao arquivo.
Crie um arquivo em seu texto preferencial ou editor XML e salve-o como SampleData.xml. Adicione o documento XML fornecido anteriormente neste exemplo ao arquivo.
Crie um arquivo em seu editor XML ou texto preferencial e salve-o como ValidateAndBulkload.vbs. A esse arquivo, adicione o código VBScript fornecido acima no início deste tópico. Modifique a cadeia de conexão para fornecer o nome apropriado do servidor e do banco de dados. Especifique o caminho apropriado para os arquivos especificados como parâmetros para o método Execute.
Execute o código VBScript acima. O Carregamento em Massa XML carrega o documento XML nas tabelas Cust e CustOrder.
Esse é 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>
C. Usando relações de cadeia no esquema para carregar XML em massa
Este exemplo ilustra como a relação M:N especificada no esquema de mapeamento é usada pelo Carregamento em Massa XML para carregar dados em uma 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 product> . O <elemento Order> é mapeado para a tabela Ord e o <elemento Product> é mapeado para a tabela Produto no banco de dados. A relação de cadeia especificada no <elemento Product> identifica uma relação M:N representada pela tabela OrderDetail. (Um pedido pode incluir muitos produtos e um produto pode ser incluído em muitos pedidos.)
Quando você estiver carregando em massa um documento XML com esse esquema, os registros são adicionados às tabelas Ord, Product e OrderDetail.
Para testar um exemplo de trabalho
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)); GOSalve o esquema fornecido acima neste exemplo como SampleSchema.xml.
Salve 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 arquivo em seu editor XML ou texto preferencial e salve-o como ValidateAndBulkload.vbs. A esse arquivo, adicione o código VBScript fornecido acima no início deste tópico. Modifique a cadeia de conexão para fornecer o nome apropriado do servidor e do banco de dados. Descompacte as linhas a seguir do código-fonte para este exemplo.
objBL.CheckConstraints = True objBL.Transaction=TrueExecute o código VBScript. O Carregamento em Massa XML carrega o documento XML nas tabelas Ord e Product.
D. Carregamento em massa em colunas de tipo de identidade
Este exemplo ilustra como a carga em massa manipula colunas de tipo 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 de identidade
ProductID na tabela Produto é uma coluna de tipo de identidade.
As colunas OrderID e ProductID no OrderDetail são colunas de chave estrangeira que se referem às colunas de chave primária correspondentes nas tabelas Ord e Product.
Veja a seguir os esquemas de tabela para este exemplo:
Ord (OrderID, CustomerID)
Product (ProductID, ProductName)
OrderDetail (OrderID, ProductID)
Neste exemplo de Carregamento em Massa XML, a propriedade KeepIdentity do modelo de objeto BulkLoad é definida como false. Portanto, o SQL Server gera valores de identidade para as colunas ProductID e OrderID nas tabelas Product e Ord, respectivamente (todos os valores fornecidos nos documentos a serem carregados em massa são ignorados).
Nesse caso, o Carregamento em Massa XML identifica a relação chave primária/chave estrangeira entre tabelas. O Carregamento em Massa primeiro insere registros nas tabelas com a chave primária e, em seguida, propaga o valor de identidade gerado pelo SQL Server para as tabelas com colunas de chave estrangeira. No exemplo a seguir, o Carregamento em Massa XML insere dados em tabelas nesta ordem:
Produto
Ord
OrderDetail
Observação
Para propagar valores de identidade gerados nas tabelas Produtos e Pedidos, a lógica de processamento requer o Carregamento em Massa XML para acompanhar esses valores para inserção posterior na tabela OrderDetails. Para fazer isso, o XML Bulk Load cria tabelas intermediárias, preenche os dados nessas tabelas e, posteriormente, os remove.
Para testar um exemplo de trabalho
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 arquivo em seu texto preferencial ou editor XML e salve-o como SampleSchema.xml. Adicione este esquema XSD a este arquivo.
<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 arquivo em seu texto preferencial ou editor XML e salve-o como SampleXMLData.xml. Adicione o documento XML a seguir.
<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 arquivo em seu editor XML ou texto preferencial e salve-o como ValidateAndBulkload.vbs. A esse arquivo, adicione o seguinte código VBScript. Modifique a cadeia de conexão para fornecer o nome apropriado do servidor e do banco de dados. Especifique o caminho apropriado para os arquivos que servem como parâmetros para o
Executemétodo.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 Carregamento em Massa XML carregará os dados nas tabelas apropriadas.
E. Gerando esquemas de tabela antes do carregamento em massa
O Carregamento em Massa XML poderá, opcionalmente, gerar as tabelas se elas não existirem antes do carregamento em massa. Definir a propriedade SchemaGen do objeto SQLXMLBulkLoad como TRUE faz isso. Opcionalmente, você também pode solicitar o Carregamento em Massa XML para remover todas as tabelas existentes e criá-las novamente definindo a propriedade SGDropTables como TRUE. O exemplo de VBScript a seguir ilustra o uso dessas propriedades.
Além disso, este exemplo define duas propriedades adicionais como TRUE:
CheckConstraints. Definir essa propriedade como TRUE garante que os dados inseridos nas tabelas não violem quaisquer restrições especificadas nas tabelas (nesse caso, as restrições PRIMARY KEY/FOREIGN KEY especificadas entre as tabelas Cust e CustOrder). Se houver uma violação de restrição, a carga em massa falhará.
XMLFragment. Essa propriedade deve ser definida como TRUE porque o documento XML de exemplo (fonte de dados) não contém um único elemento de nível superior (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 um exemplo de trabalho
Crie um arquivo em seu texto preferencial ou editor XML e salve-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 arquivo.
Crie um arquivo em seu texto preferencial ou editor XML e salve-o como SampleXMLData.xml. Adicione o documento XML fornecido no exemplo anterior, "Usando relações de cadeia no esquema para carregar XML em massa", ao arquivo. Remova o <elemento ROOT> do documento (para torná-lo um fragmento).
Crie um arquivo em seu editor XML ou texto preferencial e salve-o como ValidateAndBulkload.vbs. Neste arquivo, adicione o código VBScript neste exemplo. Modifique a cadeia de conexão para fornecer o nome apropriado do servidor e do banco de dados. Especifique o caminho apropriado para os arquivos especificados como parâmetros para o método Execute.
Execute o código VBScript. O Carregamento em Massa XML cria as tabelas necessárias com base no esquema de mapeamento fornecido e carrega em massa os dados nele.
F. Carregamento em massa de um fluxo
O método Execute do modelo de objeto de carregamento em massa XML usa dois parâmetros. O primeiro parâmetro é o arquivo de esquema de mapeamento. O segundo parâmetro fornece os dados XML que devem ser carregados no banco de dados. Há duas maneiras de passar os dados XML para o método Execute do XML Bulk Load:
Especifique o nome do arquivo como o parâmetro.
Passe um fluxo que contenha os dados XML.
Este exemplo ilustra como carregar em massa de um fluxo.
O VBScript primeiro executa uma instrução SELECT para recuperar informações do cliente da tabela Customers no banco de dados Northwind. Como a cláusula FOR XML é especificada (com a opção ELEMENTS) na instrução SELECT, a consulta retorna um documento XML centrado em elementos deste formulário:
<Customer>
<CustomerID>..</CustomerID>
<CompanyName>..</CompanyName>
<City>..</City>
</Customer>
...
Em seguida, o script passa o XML como um fluxo para o método Execute como seu segundo parâmetro. O método Execute carrega em massa os dados na tabela Cust.
Como esse script define a propriedade SchemaGen como TRUE e a propriedade SGDropTables como TRUE, o Carregamento em Massa XML cria a tabela Cust no banco de dados especificado. (Se a tabela já existir, ela primeiro removerá a tabela e a criará novamente.)
Este é o exemplo de 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 as informações necessárias 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 é um 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>
Abrindo um fluxo em um arquivo existente
Você também pode abrir um fluxo em um arquivo de dados XML existente e passar o fluxo como um parâmetro para o método Execute (em vez de passar o nome do arquivo como o parâmetro).
Este é um exemplo do Visual Basic de passar um fluxo como o 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 o aplicativo, use o seguinte documento XML em um arquivo (SampleData.xml) e o esquema XSD fornecido neste exemplo:
Estes são os dados de origem 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>
Esse é 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 massa em colunas de estouro
Se o esquema de mapeamento especificar uma coluna de estouro usando a anotação, o sql:overflow-field Carregamento em Massa XML copiará todos os dados não compilados 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 estouro (OverflowColumn) para a tabela Cust. Como resultado, todos os dados XML não armazenados para cada <elemento Customer> 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 prohibited="true" é especificado) são considerados estouro pela carga em massa XML e são adicionados à coluna de estouro, se especificado. (Caso contrário, eles serão ignorados.)
Para testar um exemplo de trabalho
Crie duas tabelas no banco 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 arquivo em seu texto preferencial ou editor XML e salve-o como SampleSchema.xml. Adicione o esquema XSD fornecido neste exemplo ao arquivo.
Crie um arquivo em seu texto preferencial ou editor XML e salve-o como SampleXMLData.xml. Adicione o seguinte documento XML ao arquivo:
<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 arquivo em seu editor XML ou texto preferencial e salve-o como ValidateAndBulkload.vbs. A esse arquivo, adicione o seguinte código do Microsoft Visual Basic Scripting Edition (VBScript). Modifique a cadeia de conexão para fornecer o nome apropriado do servidor e do banco de dados. Especifique o caminho apropriado para os arquivos especificados como parâmetros para o método Execute.
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.
Esse é 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. Especificando o caminho do arquivo para arquivos temporários no modo de transação
Quando você estiver carregando em massa no modo de transação (ou seja, quando a propriedade Transaction for definida como TRUE), você também deverá definir a propriedade TempFilePath quando uma das seguintes condições for verdadeira:
Você está carregando em massa em um servidor remoto.
Você deseja usar uma pasta ou unidade local alternativa (uma diferente do caminho especificado pela variável de ambiente TEMP) para armazenar os arquivos temporários criados no modo de transação.
Por exemplo, o código VBScript a seguir carrega dados do arquivo SampleXMLData.xml para as tabelas de banco de dados no modo de transação. A propriedade TempFilePath é especificada para definir o caminho para os arquivos temporários gerados no 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 de arquivo temporário deve ser um local compartilhado acessível à conta de serviço da instância de destino do SQL Server e à conta que está executando o aplicativo de carregamento em massa. A menos que você esteja carregando em massa em um servidor local, o caminho de arquivo temporário deve ser um caminho UNC (como \\servername\sharename).
Para testar um exemplo de trabalho
Crie esta tabela no banco de dados tempdb :
USE tempdb; CREATE TABLE Cust ( CustomerID uniqueidentifier, LastName varchar(20)); GOCrie um arquivo em seu texto preferencial ou editor XML e salve-o como SampleSchema.xml. Adicione o seguinte esquema XSD ao arquivo:
<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 arquivo em seu texto preferencial ou editor XML e salve-o como SampleXMLData.xml. Adicione o seguinte documento XML ao arquivo:
<ROOT> <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF" LastName="Smith" /> </ROOT>Crie um arquivo em seu editor XML ou texto preferencial e salve-o como ValidateAndBulkload.vbs. A esse arquivo, adicione o seguinte código VBScript. Modifique a cadeia de conexão para fornecer o nome apropriado do servidor e do banco de dados. Especifique o caminho apropriado para os arquivos especificados como parâmetros para o método Execute. 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 correspondente
sql:datatypepara o atributo CustomerID quando o valor de CustomerID é especificado como um GUID que inclui chaves ({ e }), 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
sql:datatypeé especificada a identificação do tipo de coluna comouniqueidentifier, a operação de carregamento em massa remove as chaves ({ e }) do valor CustomerID antes de inseri-la na coluna.
Esse é 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>
Eu. Usando uma conexão de banco de dados existente com a propriedade ConnectionCommand
Você pode usar uma conexão ADO existente para carregar XML em massa. Isso será útil se o Carregamento em Massa XML for apenas uma das muitas operações que serão executadas em uma fonte de dados.
A propriedade ConnectionCommand permite que você use uma conexão ADO existente usando um objeto de comando do ADO. Isso é 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 um exemplo de trabalho
Crie duas tabelas no banco 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 arquivo em seu texto preferencial ou editor XML e salve-o como SampleSchema.xml. Adicione o seguinte esquema XSD ao arquivo:
<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 arquivo em seu texto preferencial ou editor XML e salve-o como SampleXMLData.xml. Adicione o seguinte documento XML ao arquivo:
<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 um aplicativo do Visual Basic (Standard EXE) 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.
Esse é 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 tipo de dados xml
Se o esquema de mapeamento especificar uma coluna de tipo de dados xml usando a anotação, o sql:datatype="xml" Carregamento em Massa XML poderá copiar elementos filho XML para o campo mapeado do documento de origem para esta coluna.
Considere o seguinte esquema XSD, que mapeia uma exibição da tabela Production.ProductModel no banco de dados de exemplo AdventureWorks. Nesta tabela, o campo CatalogDescription do tipo de xml dados é mapeado para um <elemento Desc> usando as anotações e sql:datatype="xml" as sql:field anotações.
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
<xsd:element name="ProductModel" sql:relation="Production.ProductModel" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xs:string"></xsd:element>
<xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProductDescription">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Summary" type="xs:anyType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="ProductModelID" sql:field="ProductModelID" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Para testar um exemplo de trabalho
Verifique se o banco de dados de exemplo adventureworks está instalado.
Crie um arquivo em seu texto preferencial ou editor XML e salve-o como SampleSchema.xml. Copie o esquema XSD acima e cole-o no arquivo e salve-o.
Crie um arquivo em seu texto preferencial ou editor XML e salve-o como SampleXMLData.xml. Copie o documento XML a seguir e cole-o no arquivo e salve-o na mesma pasta usada para a 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; alumunim crank arm; flawless shifting. </wf:crankset></p1:Features> <!-- add one or more of these elements... one for each specific product in this product model --> <p1:Picture> <p1:Angle>front</p1:Angle> <p1:Size>small</p1:Size> <p1:ProductPhotoID>118</p1:ProductPhotoID> </p1:Picture> <!-- add any tags in <specifications> --> <p1:Specifications> These are the product specifications. <Material>Almuminum Alloy</Material><Color>Available in most colors</Color><ProductLine>Mountain bike</ProductLine><Style>Unisex</Style><RiderExperience>Advanced to Professional riders</RiderExperience></p1:Specifications> </p1:ProductDescription> </Desc> </ProductModel>Crie um arquivo em seu editor XML ou texto preferencial e salve-o como BulkloadXml.vbs. Copie o código VBScript a seguir e cole-o no arquivo. Salve-o na mesma pasta usada para os arquivos de esquema e dados XML anteriores.
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.