Share via


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

Le chargement en masse XML 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 masse 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 de chargement en masse XML 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 êtes familiarisé avec les fonctionnalités de 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. Lorsque l’utilitaire lit les données, il identifie la ou 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 le ou les enregistrements à SQL Server pour insertion.

Par exemple, le document XML source suivant se compose d’éléments Customer> 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 la table Customertable. Lorsqu’il lit la <balise de fin /Customer>, 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 effectuez un chargement en bloc en mode non traduit ( autrement dit, la propriété Transaction a la valeur FALSE) et l’une des conditions suivantes est remplie :

  • 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.

Notes

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

Si la propriété Transaction a la valeur TRUE, le chargement en masse 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 masse XML a accès à ce chemin. Si la propriété TempFilePath n’est pas spécifiée, le chemin d’accès au 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 les données en bloc.

Si la propriété ConnectionString définit la chaîne de connexion et que la propriété Transaction a la valeur TRUE, le chargement en masse 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 masse 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 masse XML doit être de type ICommand ou être un objet de commande ADO.

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