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...).
[!REMARQUE]
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 table. 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>
[!REMARQUE]
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.Les 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 obtenir une 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 MicrosoftSQL 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.
Remarque
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...) brute. |
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 <ROW>
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 :
la 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'ensemble 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).
[!REMARQUE]
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 <COLUMN>
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");
}
Voir aussi