Partager via


Présentation du chargement en masse XML (SQLXML 4.0)

S’applique à : SQL ServerAzure SQL Database

Xml Bulk Load est un objet COM autonome qui vous permet de charger des données XML semi-structurées dans des tables Microsoft SQL Server.

Vous pouvez insérer des données XML dans une base de données SQL Server à l’aide d’une instruction INSERT et de la fonction OPENXML ; Toutefois, l’utilitaire de chargement en bloc offre de meilleures performances lorsque vous devez insérer de grandes quantités de données XML.

La méthode Execute du modèle objet Xml Bulk Load prend deux paramètres :

  • Un schéma XSD (XML Schema Definition)) ou XDR (XML-Data Reduced) annoté. L'utilitaire de chargement en masse XML interprète ce schéma de mappage et les annotations spécifiées dans le schéma pour identifier les tables SQL Server dans lesquelles les données XML doivent être insérées.

  • Un document ou un fragment de document XML (un fragment de document est un document sans élément de niveau supérieur unique). Un nom de fichier ou un flux pouvant être lu par le chargement en masse XML peut être spécifié.

Le chargement en masse XML interprète le schéma de mappage et identifie le ou les tables dans lesquelles les données XML doivent être insérées.

Il est supposé que vous connaissez les fonctionnalités SQL Server suivantes :

Diffusion en continu de données XML

Le document XML source pouvant être volumineux, le document n'est pas lu intégralement en mémoire au cours du traitement de chargement en masse. Au lieu de cela, le chargement en masse XML interprète les données XML en tant que flux et lit ce flux. Comme l’utilitaire lit les données, il identifie les tables de base de données, génère le ou les enregistrements appropriés à partir de la source de données XML, puis envoie les enregistrements à SQL Server pour insertion.

Par exemple, le document XML source suivant se compose d’éléments <Client> et <d’éléments enfants Order :>

<Customer ...>  
    <Order.../>  
    <Order .../>  
     ...  
</Customer>  
...  

Lorsque le chargement en masse XML lit l’élément <Customer> , il génère un enregistrement pour customertable. Lorsqu’elle lit la <balise /Customer end> , le chargement en masse XML insère cet enregistrement dans la table dans SQL Server. De la même façon, lorsqu’il lit l’élément <Order>, le chargement en masse XML génère un enregistrement pour ordertable, puis insère cet enregistrement dans la table SQL Server lors de la lecture de la <balise de fin /Order.>

Opérations de chargement en masse XML transactionnelles et non transactionnelles

Le chargement en masse XML peut fonctionner en mode transactionnel ou non transactionnel. Les performances sont généralement optimales si vous chargez en bloc en mode non adopté : autrement dit, la propriété Transaction est définie sur FALSE) et l’une des conditions suivantes est vraie :

  • Les tables dans lesquelles les données sont chargées en masse sont vides et ne comprennent pas d'index.

  • Les tables ont des données et des index uniques.

L'approche non transactionnelle ne garantit pas de restauration en cas de problème dans le processus de chargement en masse (bien que des restaurations partielles puissent se produire). Le chargement en masse non transactionnel est approprié lorsque la base de données est vide. Par conséquent, en cas de problème, vous pouvez nettoyer la base de données et redémarrer le chargement en masse XML.

Remarque

En mode non transactionnel, le chargement en masse XML utilise une transaction interne par défaut et la valide. Lorsque la propriété Transaction est définie sur TRUE, le chargement en bloc XML n’appelle pas la validation sur cette transaction.

Si la propriété Transaction est définie sur TRUE, le chargement en bloc XML crée des fichiers temporaires, un pour chaque table identifiée dans le schéma de mappage. Le chargement en masse XML commence par stocker les enregistrements du document XML source dans ces fichiers temporaires. Ensuite, une instruction Transact-SQL BULK INSERT récupère ces enregistrements à partir des fichiers et les stocke dans les tables correspondantes. Vous pouvez spécifier l’emplacement de ces fichiers temporaires à l’aide de la propriété TempFilePath. Vous devez vous assurer que le compte SQL Server utilisé avec le chargement en bloc XML a accès à ce chemin d’accès. Si la propriété TempFilePath n’est pas spécifiée, le chemin d’accès de fichier par défaut spécifié dans la variable d’environnement TEMP est utilisé pour créer les fichiers temporaires.

Si la propriété Transaction a la valeur FALSE (paramètre par défaut), le chargement en masse XML utilise l’interface OLE DB IRowsetFastLoad pour charger en bloc les données.

Si la propriété ConnectionString définit l’chaîne de connexion et que la propriété Transaction a la valeur TRUE, le chargement en bloc XML fonctionne dans son propre contexte de transaction. (Par exemple, le chargement en masse XML démarre sa propre transaction, puis effectue une validation ou une restauration comme il convient.)

Si la propriété ConnectionCommand définit la connexion avec un objet de connexion existant et que la propriété Transaction a la valeur TRUE, le chargement en bloc XML n’émet pas d’instruction COMMIT ou ROLLBACK en cas de réussite ou d’échec, respectivement. En cas d'erreur, le chargement en masse XML retourne le message d'erreur approprié. La décision d'émettre une instruction COMMIT ou ROLLBACK appartient au client qui a initialisé le chargement en masse. L’objet de connexion utilisé pour le chargement en bloc XML doit être de type ICommand ou être un objet de commande ADO.

Dans SQLXML 4.0, un ConnectionObject ne peut pas être utilisé avec la propriété Transaction définie sur FALSE. Le mode non transmis n’est pas pris en charge avec un ConnectionObject, car il est impossible d’ouvrir plusieurs interfaces IRowsetFastLoad sur une session transmise.