Partager via


Introduction au chargement en bloc XML (SQLXML 4.0)

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 :

  • Schéma XSD (Xml Schema Definition) annoté ou XML-Data schéma réduit (XDR). 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 XML ou un fragment de document (un fragment de document est un document sans élément de niveau supérieur unique). Un nom de fichier ou un flux à partir duquel le chargement en masse XML peut être lu peut être spécifié.

Xml Bulk Load interprète le schéma de mappage et identifie 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

Étant donné que le document XML source peut être volumineux, l’ensemble du document n’est pas lu en mémoire pour le traitement de charge en bloc. Au lieu de cela, le chargement en masse XML interprète les données XML en tant que flux et les lit. 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 bloc XML traitées et non modifiées

Le chargement en bloc XML peut fonctionner en mode transactionné ou non adopté. 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 bloc sont vides sans index.

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

L’approche non adoptée ne garantit pas une restauration si un problème se produit dans le processus de chargement en bloc (bien que des restaurations partielles puissent se produire). La charge en bloc non adoptée est appropriée lorsque la base de données est vide. Par conséquent, si un problème se produit, vous pouvez nettoyer la base de données et redémarrer le chargement en bloc XML.

Remarque

En mode non adopté, le chargement en bloc XML utilise une transaction interne par défaut et le 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 stocke d’abord les enregistrements du document XML source dans ces fichiers temporaires. Ensuite, une instruction BULK INSERT Transact-SQL 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 la 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 bloc XML démarre sa propre transaction et valide ou restaure le cas échéant.)

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 est laissée au client qui a lancé la charge en bloc. 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.