Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les exemples suivants illustrent la fonctionnalité de chargement en masse XML dans Microsoft SQL Server. Chaque exemple fournit un schéma XSD et son schéma XDR équivalent.
Script du chargeur en bloc (ValidateAndBulkload.vbs)
Le script suivant, écrit dans Microsoft Visual Basic Scripting Edition (VBScript), charge un document XML dans le DOM XML ; le valide par rapport à un schéma ; et, si le document est valide, exécute une charge en masse XML pour charger le code XML dans une table SQL Server. Ce script peut être utilisé avec chacun des exemples individuels qui lui font référence plus loin dans cette rubrique.
Remarque
Le chargement en bloc XML ne génère pas d’avertissement ou d’erreur si aucun contenu n’est chargé à partir du fichier de données. Par conséquent, il est recommandé de valider votre fichier de données XML avant d’exécuter une opération de chargement en bloc.
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
Un. Chargement en bloc xml dans une table
Cet exemple établit une connexion à l’instance de SQL Server spécifiée dans la propriété ConnectionString (MyServer). L’exemple spécifie également la propriété ErrorLogFile. Par conséquent, la sortie d’erreur est enregistrée dans le fichier spécifié (« C :\error.log »), que vous pouvez également décider de changer d’emplacement. Notez également que la méthode Execute a comme paramètres le fichier de schéma de mappage (SampleSchema.xml) et le fichier de données XML (SampleXMLData.xml). Lorsque le chargement en bloc s’exécute, la table Cust que vous avez créée dans la base de données tempdb contient de nouveaux enregistrements en fonction du contenu du fichier de données XML.
Pour tester un exemple de chargement en bloc
Créez cette table :
CREATE TABLE Cust(CustomerID int PRIMARY KEY, CompanyName varchar(20), City varchar(20)); GOCréez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleSchema.xml. Dans ce fichier, ajoutez le schéma XSD suivant :
<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>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleXMLData.xml. Dans ce fichier, ajoutez le document XML suivant :
<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>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que ValidateAndBulkload.vbs. Dans ce fichier, ajoutez le code VBScript fourni ci-dessus au début de cette rubrique. Modifiez la chaîne de connexion pour fournir le nom de serveur approprié. Spécifiez le chemin d’accès approprié pour les fichiers spécifiés en tant que paramètres de la méthode Execute.
Exécutez le code VBScript. Le chargement en masse XML charge le code XML dans la table Cust.
Il s’agit du schéma XDR équivalent :
<?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. Chargement en bloc de données XML dans plusieurs tables
Dans cet exemple, le document XML se compose des <éléments Customer> et <Order> .
<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>
Cet exemple charge en bloc les données XML dans deux tables, Cust et CustOrder :
Cust(CustomerID, CompanyName, City)
CustOrder(OrderID, CustomerID)
Le schéma XSD suivant définit la vue XML de ces tables. Le schéma spécifie la relation parent-enfant entre les <éléments Customer> et <Order> .
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustCustOrder"
parent="Cust"
parent-key="CustomerID"
child="CustOrder"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="ROOT" sql:is-constant="1" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Customers" sql:relation="Cust" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerID" type="xsd:integer" />
<xsd:element name="CompanyName" type="xsd:string" />
<xsd:element name="City" type="xsd:string" />
<xsd:element name="Order"
sql:relation="CustOrder"
sql:relationship="CustCustOrder" >
<xsd:complexType>
<xsd:attribute name="OrderID" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Xml Bulk Load utilise la relation clé primaire/clé étrangère spécifiée ci-dessus entre les <éléments Cust> et <CustOrder> pour charger en bloc les données dans les deux tables.
Pour tester un exemple de chargement en bloc
Créez deux tables dans la base de données 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));Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleSchema.xml. Ajoutez le schéma XSD fourni dans cet exemple au fichier.
Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleData.xml. Ajoutez le document XML fourni précédemment dans cet exemple au fichier.
Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que ValidateAndBulkload.vbs. Dans ce fichier, ajoutez le code VBScript fourni ci-dessus au début de cette rubrique. Modifiez la chaîne de connexion pour fournir le nom approprié du serveur et de la base de données. Spécifiez le chemin d’accès approprié pour les fichiers spécifiés en tant que paramètres de la méthode Execute.
Exécutez le code VBScript ci-dessus. Le chargement en masse XML charge le document XML dans les tables Cust et CustOrder.
Il s’agit du schéma XDR équivalent :
<?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>
Chapitre C. Utilisation des relations de chaîne dans le schéma pour charger en bloc du code XML
Cet exemple montre comment la relation M :N spécifiée dans le schéma de mappage est utilisée par le chargement en masse XML pour charger des données dans une table qui représente une relation M :N.
Par exemple, considérez ce schéma 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>
Le schéma spécifie un <élément Order> avec un <élément Enfant Product> . L’élément <Order> mappe à la table Ord et l’élément <Product> est mappé à la table Product dans la base de données. La relation de chaîne spécifiée sur l’élément <Product> identifie une relation M :N représentée par la table OrderDetail. (Une commande peut inclure de nombreux produits et un produit peut être inclus dans de nombreuses commandes.)
Lorsque vous chargez en bloc un document XML avec ce schéma, les enregistrements sont ajoutés aux tables Ord, Product et OrderDetail.
Pour tester un exemple de travail
Créez trois tables :
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)); GOEnregistrez le schéma fourni ci-dessus dans cet exemple en tant que SampleSchema.xml.
Enregistrez les exemples de données XML suivants en tant que 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>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que ValidateAndBulkload.vbs. Dans ce fichier, ajoutez le code VBScript fourni ci-dessus au début de cette rubrique. Modifiez la chaîne de connexion pour fournir le nom approprié du serveur et de la base de données. Supprimez les marques de commentaire suivantes à partir du code source de cet exemple.
objBL.CheckConstraints = True objBL.Transaction=TrueExécutez le code VBScript. Le chargement en masse XML charge le document XML dans les tables Ord et Product.
D. Chargement en bloc dans les colonnes de type d’identité
Cet exemple montre comment le chargement en bloc gère les colonnes de type d’identité. Dans l’exemple, les données sont chargées en bloc dans trois tables (Ord, Product et OrderDetail).
Dans ces tableaux :
OrderID dans la table Ord est une colonne de type d’identité
ProductID dans la table Product est une colonne de type d’identité.
Les colonnes OrderID et ProductID dans OrderDetail sont des colonnes clés étrangères faisant référence aux colonnes clés primaires correspondantes dans les tables Ord et Product.
Voici les schémas de table de cet exemple :
Ord (OrderID, CustomerID)
Product (ProductID, ProductName)
OrderDetail (OrderID, ProductID)
Dans cet exemple de chargement en masse XML, la propriété KeepIdentity du modèle objet BulkLoad a la valeur false. Par conséquent, SQL Server génère des valeurs d’identité pour les colonnes ProductID et OrderID dans les tables Product et Ord, respectivement (toutes les valeurs fournies dans les documents à charger en bloc sont ignorées).
Dans ce cas, le chargement en masse XML identifie la relation clé primaire/clé étrangère entre les tables. Le chargement en bloc insère d’abord des enregistrements dans les tables avec la clé primaire, puis propage la valeur d’identité générée par SQL Server aux tables avec des colonnes de clé étrangère. Dans l’exemple suivant, le chargement en masse XML insère des données dans des tables dans cet ordre :
Produit
Ord
OrderDetail
Remarque
Pour propager les valeurs d’identité générées dans les tables Products et Orders, la logique de traitement nécessite le chargement en masse XML pour effectuer le suivi de ces valeurs pour une insertion ultérieure dans la table OrderDetails. Pour ce faire, le chargement en masse XML crée des tables intermédiaires, remplit les données de ces tables et les supprime ultérieurement.
Pour tester un exemple de travail
Créez ces tables :
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)); GOCréez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleSchema.xml. Ajoutez ce schéma XSD à ce fichier.
<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>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleXMLData.xml. Ajoutez le document XML suivant.
<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>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que ValidateAndBulkload.vbs. Dans ce fichier, ajoutez le code VBScript suivant. Modifiez la chaîne de connexion pour fournir le nom approprié du serveur et de la base de données. Spécifiez le chemin d’accès approprié pour les fichiers qui servent de paramètres à la
Executeméthode.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."Exécutez le code VBScript. Le chargement en masse XML charge les données dans les tables appropriées.
E. Génération de schémas de table avant le chargement en bloc
Le chargement en bloc XML peut éventuellement générer les tables s’ils n’existent pas avant le chargement en bloc. La définition de la propriété SchemaGen de l’objet SQLXMLBulkLoad sur TRUE effectue cette opération. Vous pouvez également demander au chargement en masse XML de supprimer toutes les tables existantes et de les recréer en définissant la propriété SGDropTables sur TRUE. L’exemple VBScript suivant illustre l’utilisation de ces propriétés.
En outre, cet exemple définit deux propriétés supplémentaires sur TRUE :
CheckConstraints. La définition de cette propriété sur TRUE garantit que les données insérées dans les tables ne respectent pas les contraintes spécifiées sur les tables (dans ce cas les contraintes PRIMARY KEY/FOREIGN KEY spécifiées entre les tables Cust et CustOrder). En cas de violation de contrainte, la charge en bloc échoue.
XMLFragment. Cette propriété doit être définie sur TRUE, car l’exemple de document XML (source de données) ne contient aucun élément de niveau supérieur unique (et est donc un fragment).
Il s’agit du code 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
Pour tester un exemple de travail
Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleSchema.xml. Ajoutez le schéma XSD fourni dans l’exemple précédent, « Utilisation de relations de chaîne dans le schéma pour charger en bloc du code XML » dans le fichier.
Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleXMLData.xml. Ajoutez le document XML fourni dans l’exemple précédent, « Utilisation de relations de chaîne dans le schéma pour charger en bloc xml » dans le fichier. Supprimez l’élément <ROOT> du document (pour le rendre fragmenté).
Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que ValidateAndBulkload.vbs. Dans ce fichier, ajoutez le code VBScript dans cet exemple. Modifiez la chaîne de connexion pour fournir le nom approprié du serveur et de la base de données. Spécifiez le chemin d’accès approprié pour les fichiers spécifiés en tant que paramètres de la méthode Execute.
Exécutez le code VBScript. Le chargement en masse XML crée les tables nécessaires en fonction du schéma de mappage fourni et charge en bloc les données dans celles-ci.
F. Chargement en bloc à partir d’un flux
La méthode Execute du modèle objet Xml Bulk Load prend deux paramètres. Le premier paramètre est le fichier de schéma de mappage. Le deuxième paramètre fournit les données XML à charger dans la base de données. Il existe deux façons de transmettre les données XML à la méthode Execute de chargement en masse XML :
Spécifiez le nom de fichier comme paramètre.
Transmettez un flux qui contient les données XML.
Cet exemple montre comment charger en bloc à partir d’un flux.
VBScript exécute d’abord une instruction SELECT pour récupérer les informations client de la table Customers dans la base de données Northwind. Étant donné que la clause FOR XML est spécifiée (avec l’option ELEMENTS) dans l’instruction SELECT, la requête retourne un document XML centré sur les éléments de ce formulaire :
<Customer>
<CustomerID>..</CustomerID>
<CompanyName>..</CompanyName>
<City>..</City>
</Customer>
...
Le script transmet ensuite le code XML en tant que flux à la méthode Execute en tant que deuxième paramètre. La méthode Execute charge en bloc les données dans la table Cust.
Étant donné que ce script définit la propriété SchemaGen sur TRUE et la propriété SGDropTables sur TRUE, le chargement en masse XML crée la table Cust dans la base de données spécifiée. (Si la table existe déjà, elle supprime d’abord la table, puis la recrée.)
Voici l’exemple 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
Le schéma de mappage XSD suivant fournit les informations nécessaires pour créer la table :
<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>
Il s’agit d’un schéma XDR équivalent :
<?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>
Ouverture d’un flux sur un fichier existant
Vous pouvez également ouvrir un flux sur un fichier de données XML existant et transmettre le flux en tant que paramètre à la méthode Execute (au lieu de passer le nom de fichier en tant que paramètre).
Il s’agit d’un exemple Visual Basic de passage d’un flux en tant que paramètre :
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
Pour tester l’application, utilisez le document XML suivant dans un fichier (SampleData.xml) et le schéma XSD fourni dans cet exemple :
Il s’agit des données sources 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>
Il s’agit du schéma XDR équivalent :
<?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. Chargement en bloc dans les colonnes de dépassement de capacité
Si le schéma de mappage spécifie une colonne de dépassement de capacité à l’aide de l’annotation sql:overflow-field , le chargement en masse XML copie toutes les données non facturées du document source dans cette colonne.
Considérez ce schéma 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>
Le schéma identifie une colonne de dépassement de capacité (OverflowColumn) pour la table Cust. Par conséquent, toutes les données XML non facturées pour chaque <élément Customer> sont ajoutées à cette colonne.
Remarque
Tous les éléments abstraits (éléments pour lesquels abstract="true » est spécifié) et tous les attributs interdits (attributs pour lesquels interdited="true » est spécifié) sont considérés comme un dépassement de capacité par chargement en bloc XML et sont ajoutés à la colonne de dépassement, le cas échéant. (Sinon, ils sont ignorés.)
Pour tester un exemple de travail
Créez deux tables dans la base de données 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)); GOCréez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleSchema.xml. Ajoutez le schéma XSD fourni dans cet exemple au fichier.
Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleXMLData.xml. Ajoutez le document XML suivant au fichier :
<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>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que ValidateAndBulkload.vbs. Dans ce fichier, ajoutez le code Microsoft Visual Basic Scripting Edition (VBScript) suivant. Modifiez la chaîne de connexion pour fournir le nom approprié du serveur et de la base de données. Spécifiez le chemin d’accès approprié pour les fichiers spécifiés en tant que paramètres de la méthode 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=NothingExécutez le code VBScript.
Il s’agit du schéma XDR équivalent :
<?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. Spécification du chemin d’accès des fichiers temporaires en mode transaction
Lorsque vous chargez en bloc en mode transaction (autrement dit, lorsque la propriété Transaction est définie sur TRUE), vous devez également définir la propriété TempFilePath lorsque l’une des conditions suivantes est remplie :
Vous chargez en bloc sur un serveur distant.
Vous souhaitez utiliser un autre lecteur ou dossier local (un autre que le chemin d’accès spécifié par la variable d’environnement TEMP) pour stocker les fichiers temporaires créés en mode transactionnel.
Par exemple, le code VBScript suivant charge en bloc les données du fichier SampleXMLData.xml dans les tables de base de données en mode transactionnel. La propriété TempFilePath est spécifiée pour définir le chemin d’accès des fichiers temporaires générés en mode transactionnel.
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
Remarque
Le chemin d’accès au fichier temporaire doit être un emplacement partagé accessible au compte de service de l’instance cible de SQL Server et au compte qui exécute l’application de chargement en bloc. Sauf si vous chargez en bloc sur un serveur local, le chemin d’accès du fichier temporaire doit être un chemin UNC (par exemple, \\servername\sharename).
Pour tester un exemple de travail
Créez cette table dans la base de données tempdb :
USE tempdb; CREATE TABLE Cust ( CustomerID uniqueidentifier, LastName varchar(20)); GOCréez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleSchema.xml. Ajoutez le schéma XSD suivant au fichier :
<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>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleXMLData.xml. Ajoutez le document XML suivant au fichier :
<ROOT> <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF" LastName="Smith" /> </ROOT>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que ValidateAndBulkload.vbs. Dans ce fichier, ajoutez le code VBScript suivant. Modifiez la chaîne de connexion pour fournir le nom approprié du serveur et de la base de données. Spécifiez le chemin d’accès approprié pour les fichiers spécifiés en tant que paramètres de la méthode Execute. Spécifiez également le chemin d’accès approprié pour la propriété 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=NothingExécutez le code VBScript.
Le schéma doit spécifier le correspondant
sql:datatypepour l’attribut CustomerID lorsque la valeur de CustomerID est spécifiée en tant que GUID qui inclut des accolades ({ et }), telles que :<ROOT> <Customers CustomerID="{6F9619FF-8B86-D011-B42D-00C04FC964FF}" LastName="Smith" /> </ROOT>Il s’agit du schéma mis à jour :
<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>Lorsque
sql:datatypel’identification du typeuniqueidentifierde colonne est spécifiée, l’opération de chargement en bloc supprime les accolades ({ et }) de la valeur CustomerID avant de l’insérer dans la colonne.
Il s’agit du schéma XDR équivalent :
<?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>
Je. Utilisation d’une connexion de base de données existante avec la propriété ConnectionCommand
Vous pouvez utiliser une connexion ADO existante pour charger en bloc du code XML. Cela est utile si le chargement en masse XML n’est qu’une des nombreuses opérations qui seront effectuées sur une source de données.
La propriété ConnectionCommand vous permet d’utiliser une connexion ADO existante à l’aide d’un objet de commande ADO. Ceci est illustré dans l’exemple Visual Basic suivant :
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
Pour tester un exemple de travail
Créez deux tables dans la base de données 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); GOCréez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleSchema.xml. Ajoutez le schéma XSD suivant au fichier :
<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>Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleXMLData.xml. Ajoutez le document XML suivant au fichier :
<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>Créez une application Visual Basic (EXE Standard) et le code précédent. Ajoutez ces références au projet :
Microsoft XML BulkLoad for SQL Server 4.0 Type Library Microsoft ActiveX Data objects 2.6 LibraryExécutez l’application.
Il s’agit du schéma XDR équivalent :
<?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. Chargement en bloc dans les colonnes de type de données xml
Si le schéma de mappage spécifie une colonne de type de données XML à l’aide de l’annotation sql:datatype="xml" , le chargement en masse XML peut copier des éléments enfants XML pour le champ mappé à partir du document source dans cette colonne.
Considérez le schéma XSD suivant, qui mappe une vue de la table Production.ProductModel dans l’exemple de base de données AdventureWorks. Dans ce tableau, le champ CatalogDescription du type de xml données est mappé à un <élément Desc> à l’aide des annotations et sql:datatype="xml" des sql:field annotations.
<?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>
Pour tester un exemple de travail
Vérifiez que l’exemple de base de données AdventureWorks est installé.
Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleSchema.xml. Copiez le schéma XSD ci-dessus et collez-le dans le fichier et enregistrez-le.
Créez un fichier dans votre éditeur XML ou texte préféré, puis enregistrez-le en tant que SampleXMLData.xml. Copiez le document XML suivant ci-dessous et collez-le dans le fichier et enregistrez-le dans le même dossier que celui utilisé pour l’étape précédente.
<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>Créez un fichier dans votre éditeur de texte ou XML préféré, puis enregistrez-le en tant que BulkloadXml.vbs. Copiez le code VBScript suivant et collez-le dans le fichier. Enregistrez-le dans le même dossier que celui utilisé pour les fichiers de schéma et de données XML précédents.
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=NothingExécutez le script BulkloadXml.vbs.