Introduction aux fichiers de format
Un fichier utilisé pour stocker des informations de format pour chaque champ d'un fichier de données relatif à une table donnée est appelé fichier de format. Un fichier de format fournit toutes les informations de format nécessaires à l'exportation ou l'importation en bloc des données. Un fichier de format fournit un système souple d'écriture de fichiers de données, nécessitant peu ou aucune édition pour se conformer aux autres formats de données, ou de lecture de fichiers de données provenant d'autres logiciels.
Dans MicrosoftSQL Server 2000 et les versions précédentes, l'exportation et l'importation en bloc fonctionnent avec un seul type de format de fichier. Ce format est toujours pris en charge. Cependant, SQL Server 2005 et les versions ultérieures prennent aussi en charge les fichiers de format XML comme alternative. Les fichiers de format correspondant au type d'origine sont appelés fichiers de format non XML.
Tous les fichiers de format contiennent la description de chacun des champs d'un fichier de données. Les fichiers de format XML contiennent également les descriptions des colonnes de table correspondantes. En règle générale, les fichiers de format XML et non-XML sont interchangeables. Toutefois, nous recommandons d'utiliser la syntaxe XML pour des nouveaux fichiers de format, car ils offrent plusieurs avantages par rapport aux fichiers de format non XML. Un fichier de format XML possède les caractéristiques suivantes :
s'auto-décrit et est simple à lire, écrire et étendre ;
contient les types de données des colonnes cibles.
Ceci permet d'établir une séparation entre la manière dont les données sont représentées dans le fichier de données et le type de données associé à chaque champ du fichier. Par exemple, si un fichier de données contient une représentation en caractères des données, le type de colonne SQL correspondant est perdu.
La commande bcp et l'instruction BULK INSERT utilisent les colonnes de la table cible pour effectuer la conversion de type. Cela rend une table cible nécessaire. En revanche, la fonction OPENROWSET(BULK...) utilise un fichier de format XML pour lire les données d'un fichier de données. L'utilisation d'une table cible est donc facultative.
Permet de charger un champ qui contient un seul type de données LOB depuis un fichier de données.
La syntaxe d'un fichier de format ne dépend pas de la direction dans laquelle s'effectue l'opération : elle est la même qu'il s'agisse d'une exportation ou d'une importation en bloc.
Pour plus d'informations sur la structure de chaque type de fichiers de format, consultez « Exemple » plus loin dans cette rubrique.
Quand faut-il utiliser un format de fichier ?
Une instruction INSERT ... SELECT * FROM OPENROWSET(BULK...) nécessite toujours un fichier de format.
- Pour bcp ou BULK INSERT, dans les cas simples, l'utilisation d'un fichier de format est facultative et rarement nécessaire. Toutefois, pour les importations en bloc complexes, un fichier de format est souvent nécessaire.
Des fichiers de format sont nécessaires dans les cas suivants :
Le même fichier de données est utilisé comme source pour plusieurs tables possédant des schémas différents.
Le fichier de données contient un nombre de champs différent du nombre de colonnes dans la table cible. Par exemple :
La table cible contient au moins une colonne pour laquelle une valeur par défaut est définie ou une valeur NULL est autorisée.
Les utilisateurs n'ont pas les autorisations SELECT/INSERT sur une ou plusieurs colonnes de la table.
Un seul fichier de données est utilisé avec au moins deux tables dont les schémas sont différents.
L'ordre des colonnes est différent dans le fichier des données et la table.
Les caractères de fin ou les longueurs de préfixes sont différents dans les colonnes du fichier de données.
[!REMARQUE]
S'il n'existe pas de fichier de format et qu'une commande bcp définit un commutateur de format de données (-n, -c, -w ou -N) ou qu'une opération BULK INSERT définit l'option DATAFILETYPE, le format de données défini est utilisé comme méthode par défaut pour interpréter les champs du fichier de données.
Exemples
Les exemples suivants illustrent la structure d'un fichier de format XML et non XML. Ces fichiers de format correspondent à la table HumanResources.myTeam dans l'exemple de base de données AdventureWorks. Cette table contient quatre colonnes : EmployeeID, Name, Title et ModifiedDate.
[!REMARQUE]
Pour plus d'informations sur cette table et sa création, consultez Création de la table HumanResources.myTeam.
A. Utilisation d'un fichier de format non XML
Le fichier de format non XML suivant utilise le format de données natif SQL Server de la table HumanResources.myTeam. Ce fichier de format a été créé à l'aide de la commande bcp suivante.
bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Fmt -n -T
The contents of this format file are as follows: 9.0
4
1 SQLSMALLINT 0 2 "" 1 EmployeeID ""
2 SQLNCHAR 2 100 "" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLNCHAR 2 100 "" 3 Title SQL_Latin1_General_CP1_CI_AS
4 SQLNCHAR 2 100 "" 4 Background SQL_Latin1_General_CP1_CI_AS
Pour plus d'informations, consultez Description des fichiers de format non XML.
B. Utilisation d'un fichier de format XML
Le fichier de format XML suivant utilise le format de données natif SQL Server de la table HumanResources.myTeam. Ce fichier de format a été créé à l'aide de la commande bcp suivante.
bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Xml -x -n -T
Le fichier de format contient :
<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="NativePrefix" LENGTH="1"/>
<FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="EmployeeID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="Title" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="Background" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
Pour plus d'informations, consultez Description des fichiers de format XML.