Syntaxe de schéma pour les fichiers de format XML

Cette section décrit la syntaxe des fichiers de format XML. Pour voir comment la syntaxe correspond à de véritables fichiers de format XML, consultez Exemples de fichiers de format XML. Cette section examine également comment l'importation en bloc utilise les éléments <ROW> et <COLUMN> et comment inclure la valeur xsi:type d'un élément dans un jeu de données.

Vous pouvez utiliser un fichier de format XML avec une commande bcp, une instruction BULK INSERT ou une instruction INSERT ... SELECT * FROM OPENROWSET(BULK...).

Notes

   Vous pouvez modifier un fichier de format pour vous permettre une importation en bloc à partir d'un fichier de données dans lequel le nombre et/ou l'ordre des champs diffèrent du nombre et/ou de l'ordre des colonnes de données. Pour plus d'informations, consultez Utilisation d'un fichier de format pour associer des champs à des colonnes lors de l'importation en bloc.

Syntaxe de base du schéma XML

Ces instructions de syntaxe illustrent uniquement les éléments (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW> et <COLUMN>) et leurs attributs de base.

<BCPFORMAT ...>

   <RECORD>

      <FIELD ID = "fieldID" xsi:type = "fieldType" [...]

      />

   </RECORD>

   <ROW>

      <COLUMN SOURCE = "fieldID" NAME = "columnName" xsi:type = "columnType" [...]

      />

   </ROW>

</BCPFORMAT>

Notes

Les attributs supplémentaires qui sont associés à la valeur de xsi:type dans un élément <FIELD> ou <COLUMN> sont décrits ultérieurement dans cette rubrique.

Description des éléments du schéma

Cette section résume l'objet de chaque élément que le schéma XML définit pour les fichiers de format XML. Les attributs sont décrits dans des sections séparées plus loin dans cette rubrique.

  • <BCPFORMAT>
    Élément format-file qui définit la structure d'enregistrement d'un fichier de données spécifique et sa correspondance aux colonnes d'une ligne dans la table.

  • <RECORD .../>
    Définit un élément complexe contenant un ou plusieurs éléments <FIELD>. L'ordre dans lequel les champs sont déclarés dans le fichier de format est celui dans lequel ces champs apparaissent dans le fichier de données.

  • <FIELD .../>
    Définit un champ dans le fichier de données, qui contient des données.

    Des attributs de cet élément sont décrits dans la section « Attributs de l'élément <FIELD> », plus loin dans cette rubrique.

  • <ROW .../>
    Définit un élément complexe contenant un ou plusieurs éléments <COLUMN>. L'ordre des éléments <COLUMN> est indépendant de l'ordre des éléments <FIELD> dans une définition RECORD. L'ordre des éléments <COLUMN> dans un fichier de format détermine plutôt l'ordre des colonnes de l'ensemble de lignes résultant. Les champs de données sont chargés dans l'ordre de déclaration des éléments <COLUMN> correspondants dans l'élément <COLUMN>.

    Pour plus d'informations, consultez « Comment l'importation en bloc utilise-t-elle l'élément <ROW> », plus loin dans cette rubrique.

  • <COLUMN>
    Définit une colonne comme un élément (<COLUMN>). Chaque élément <COLUMN> correspond à un élément <FIELD> (dont l'ID est spécifié dans l'attribut SOURCE de l'élément <COLUMN>).

    Les attributs de cet élément sont décrits dans la section « Attributs de l'élément <COLUMN> », plus loin dans cette rubrique. Pour plus d'informations, consultez « Comment l'importation en bloc utilise-t-elle l'élément <COLUMN> », plus loin dans cette rubrique.

  • </BCPFORMAT>
    Requis pour terminer le fichier de format.

Attributs de l'élément <FIELD>

Cette section décrit les attributs de l'élément <FIELD>, qui sont résumés dans la syntaxe de schéma suivante :

<FIELD

   ID ="fieldID"

   xsi**:**type ="fieldType"

   [ LENGTH ="n" ]

   [ PREFIX_LENGTH ="p" ]

   [ MAX_LENGTH ="m" ]

   [ COLLATION ="collationName" ]

   [ TERMINATOR ="terminator" ]

/>

Chaque élément <FIELD> est indépendant des autres. Un champ est décrit en termes des attributs suivants :

Attribut FIELD

Description

Facultatif /

Obligatoire

ID ="fieldID"

Spécifie le nom logique du champ dans le fichier de données. L'ID d'un champ est la clé utilisée pour y faire référence.

L'élément <FIELD ID="fieldID"/> est mappé avec <COLUMN SOURCE="fieldID"/>

Obligatoire

xsi:type ="fieldType"

Il s'agit d'une construction XML (utilisée comme un attribut) qui identifie le type de l'instance de l'élément. La valeur de fieldType détermine de quels attributs facultatifs (ci-dessous) vous avez besoin dans une instance donnée.

Obligatoire (selon le type de données)

LENGTH ="n"

Cet attribut définit la longueur pour une instance d'un type de données à longueur fixe.

Cette valeur de n doit être un entier positif.

Facultatif sauf s'il est requis par la valeur xsi:type

PREFIX_LENGTH ="p"

Cet attribut définit la longueur de préfixe pour une représentation de données binaires. La valeur PREFIX_LENGTH, p, doit correspondre à l'une des valeurs suivantes : 1, 2, 4 ou 8.

Facultatif sauf s'il est requis par la valeur xsi:type

MAX_LENGTH ="m"

Cet attribut est le nombre maximal d'octets pouvant être stockés dans un champ donné. Sans table cible, la longueur maximale de la colonne est inconnue. L'attribut MAX_LENGTH limite la longueur maximale d'une colonne de caractères en sortie, limitant ainsi le stockage alloué pour la valeur de la colonne. Ceci est particulièrement pratique lors de l'utilisation de l'option BULK de la fonction OPENROWSET dans une clause SELECT FROM.

Cette valeur de m doit être un entier positif. Par défaut, la longueur maximale est de 8 000 caractères pour une colonne char et de 4 000 caractères pour une colonne nchar.

Facultatif

COLLATION ="collationName"

COLLATION est uniquement autorisé pour les champs caractères. Pour afficher la liste des noms de classements SQL, consultez Nom du classement SQL Server (Transact-SQL).

Facultatif

TERMINATOR = "terminator"

Cet attribut spécifie la marque de fin d'un champ de données. La marque de fin peut être n'importe quel caractère. La marque de fin doit être un caractère unique ne faisant pas partie des données.

Par défaut, la marque de fin de champ est le caractère tabulation (représenté par \t). Pour représenter une marque de paragraphe, utilisez \r\n.

Utilisé uniquement avec un xsi:type de données caractères, qui nécessite cet attribut

Valeurs Xsi:type de l'élément <FIELD>

La valeur xsi:type est une construction XML (utilisée comme un attribut) qui identifie le type de données d'une instance d'un élément. Pour plus d'informations sur l'utilisation de cette valeur, consultez « Placement de la valeur xsi:type dans un ensemble de données », plus loin dans cette section.

La valeur xsi:type de l'élément <FIELD> prend en charge les types de données suivants.

Valeurs xsi:type <FIELD>

Attribut(s) XML requis

pour le type de données

Attribut(s) XML facultatif(s)

pour le type de données

NativeFixed

LENGTH

Aucune.

NativePrefix

PREFIX_LENGTH

MAX_LENGTH

CharFixed

LENGTH

COLLATION

NCharFixed

LENGTH

COLLATION

CharPrefix

PREFIX_LENGTH

MAX_LENGTH, COLLATION

NCharPrefix

PREFIX_LENGTH

MAX_LENGTH, COLLATION

CharTerm

TERMINATOR

MAX_LENGTH, COLLATION

NCharTerm

TERMINATOR

MAX_LENGTH, COLLATION

Pour plus d'informations sur les types de données Microsoft SQL Server, consultez Types de données (Transact-SQL).

Attributs de l'élément <COLUMN>

Cette section décrit les attributs de l'élément <COLUMN>, qui sont résumés dans la syntaxe de schéma suivante :

<COLUMN

   SOURCE = "fieldID"

   NAME = "columnName"

   xsi:type = "columnType"

   [ LENGTH = "n" ]

   [ PRECISION = "n" ]

   [ SCALE = "value" ]

   [ NULLABLE = { "YES"

"NO" } ]

/>

Un champ est mappé à une colonne dans la table cible à l'aide des attributs suivants :

Attribut COLUMN

Description

Facultatif /

Obligatoire

SOURCE ="fieldID"

Spécifie l'ID du champ mappé à la colonne.

L'élément <COLUMN SOURCE="fieldID"/> est mappé avec <FIELD ID="fieldID"/>

Obligatoire

NAME = "columnName"

Spécifie le nom de la colonne dans l'ensemble de lignes représenté par le fichier de format. Ce nom de colonne est utilisé pour identifier la colonne dans le jeu de résultats, et il ne doit pas nécessairement correspondre au nom de colonne utilisé dans la table cible.

Obligatoire

xsi:type ="ColumnType"

Il s'agit d'une construction XML (utilisée comme un attribut) qui identifie le type de données de l'instance de l'élément. La valeur de ColumnType détermine de quels attributs facultatifs (ci-dessous) vous avez besoin dans une instance donnée.

RemarqueRemarque
Les valeurs possibles de ColumnType et leurs attributs associés sont répertoriés dans le tableau suivant.

Facultatif

LENGTH ="n"

Définit la longueur d'une instance d'un type de données à longueur fixe. LENGTH est utilisé uniquement lorsque xsi:type est un type de données string.

Cette valeur de n doit être un entier positif.

Facultatif (disponible uniquement si xsi:type est un type de données string)

PRECISION ="n"

Nombre de chiffres qui composent un nombre. Par exemple, le nombre 123,45 a une précision de 5.

Cette valeur doit être un entier positif.

Facultatif (disponible uniquement si xsi:type est un type de données variable-number)

SCALE ="int"

Indique le nombre de chiffres à droite du point décimal (notre virgule) dans un nombre. Par exemple, le nombre 123,45 a une précision de 2.

La valeur doit être un entier.

Facultatif (disponible uniquement si xsi:type est un type de données variable-number)

NULLABLE = { "YES"

"NO" }

Indique si une colonne peut prendre des valeurs NULL. Cet attribut est complètement indépendant de FIELDS. Cependant, si une colonne n'est pas NULLABLE et si le champ spécifie NULL (en ne spécifiant pas de valeur), une erreur d'exécution en résulte.

L'attribut NULLABLE est utilisé uniquement si vous utilisez une instruction SELECT FROM OPENROWSET(BULK...) ordinaire.

Facultatif (disponible pour n'importe quel type de données)

Valeurs Xsi:type de l'élément <COLUMN>

La valeur xsi:type est une construction XML (utilisée comme un attribut) qui identifie le type de données d'une instance d'un élément. Pour plus d'informations sur l'utilisation de cette valeur, consultez « Placement de la valeur xsi:type dans un ensemble de données », plus loin dans cette section.

L'élément <COLUMN> prend en charge les types de données SQL natifs :

Catégorie de type

Types de données <COLUMN>

Attribut(s) XML requis

pour le type de données

Attribut(s) XML facultatif(s)

pour le type de données

Fixe

SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANT et SQLUNIQUEID

Aucune.

NULLABLE

Nombre variable

SQLDECIMAL et SQLNUMERIC

Aucune.

NULLABLE, PRECISION, SCALE

LOB

SQLIMAGE, CharLOB, SQLTEXT et SQLUDT

Aucune.

NULLABLE

LOB caractère

SQLNTEXT

Aucune.

NULLABLE

Chaîne binaire

SQLBINARY et SQLVARYBIN

Aucune.

NULLABLE, LENGTH

Chaîne de caractères

SQLCHAR, SQLVARYCHAR, SQLNCHAR et SQLNVARCHAR

Aucune.

NULLABLE, LENGTH

Important

Pour exporter ou importer en bloc des données SQLXML, utilisez l'un des types de données ci-dessous dans votre fichier de format : SQLCHAR ou SQLVARYCHAR (les données sont envoyées dans la page de codes client ou dans la page de codes inhérente au classement) ; SQLNCHAR ou SQLNVARCHAR (les données sont envoyées au format Unicode) ; SQLBINARY ou SQLVARYBIN (les données sont envoyées sans être converties).

Pour plus d'informations sur les types de données SQL Server, consultez Types de données (Transact-SQL).

Comment l'importation en bloc utilise-t-elle l'élément &lt;ROW&gt;

L'élément <ROW> est ignoré dans certains contextes. L'éventuelle incidence d'un élément <ROW> sur une opération d'importation en bloc dépend du mode d'exécution de l'opération :

  • Commande bcp

    Lorsque des données sont chargées dans une table cible, bcp ignore le composant <ROW>. bcp charge plutôt les données en fonction des types de colonnes de la table cible.

  • Instructions Transact-SQL (fournisseur d'ensembles de lignes BULK INSERT et OPENROWSET)

    Lors de l'importation de données en bloc dans une table, les instructions Transact-SQL utilisent le composant <ROW> pour générer l'ensemble de lignes d'entrée. En outre, les instructions Transact-SQL effectuent les conversions de type appropriées en fonction des types de colonnes spécifiés sous <ROW> et de la colonne correspondante dans la table cible. Si une discordance existe entre les types de colonnes spécifiés dans le fichier de format et dans la table cible, une conversion de type supplémentaire intervient. Cette conversion de type supplémentaire peut entraîner certaines différences (c'est-à-dire, une perte de précision) dans le comportement du fournisseur d'ensembles de lignes en bloc BULK INSERT ou OPENROWSET en comparaison avec bcp.

    Les informations de l'élément <ROW> permettent de construire une ligne sans nécessiter d'informations supplémentaires. Pour cette raison, vous pouvez générer un ensemble de lignes en utilisant l'instruction SELECT (SELECT * FROM OPENROWSET(BULK datafile FORMATFILE=xmlformatfile).

    Notes

    La clause OPENROWSET BULK nécessite un fichier de format (notez que la conversion du type de données du champ au type de données d'une colonne n'est possible qu'avec un fichier de format XML).

Comment l'importation en bloc utilise-t-elle l'élément &lt;COLUMN&gt;

Pour l'importation de données en bloc dans une table, les éléments<COLUMN> dans un fichier de format mappent un champ de fichier de données à des colonnes de table en spécifiant :

  • La position de chaque champ dans une ligne du fichier de données.

  • Le type de colonne, qui est utilisé pour convertir le type de données du champ au type de données de la colonne souhaitée.

Si aucune colonne n'est mappée à un champ, le champ n'est pas copié dans la ou les lignes générées. Ce comportement permet à un fichier de données de générer des lignes avec différentes colonnes (dans différentes tables).

De même, pour l'exportation de données en bloc à partir d'une table, chaque élément <COLUMN> du fichier de format mappe la colonne de ligne de la table d'entrée à son champ correspondant du fichier de données de sortie.

Placement de la valeur xsi:type dans un ensemble de données

Lorsqu'un document XML est validé à travers le langage XSD (XML Schema Definition), la valeur xsi:type n'est pas placée dans l'ensemble de données. Cependant, vous pouvez placer les informations xsi:type dans l'ensemble de données en chargeant le fichier de forme XML dans un document XML (par exemple, myDoc), tel qu'illustré dans l'extrait de code suivant :

...;
myDoc.LoadXml(xmlFormat);
XmlNodeList ColumnList = myDoc.GetElementsByTagName("COLUMN");
for(int i=0;i<ColumnList.Count;i++)
{
   Console.Write("COLUMN: xsi:type=" +ColumnList[i].Attributes["type",
      "http://www.w3.org/2001/XMLSchema-instance"].Value+"\n");
}