Utilisation d'un fichier de format pour mapper les colonnes d'une table sur les champs d'un fichier de données
Il se peut que les champs d'un fichier de données ne soient pas dans le même ordre que les colonnes correspondantes présentes dans la table. Cette rubrique présente les fichiers de format XML et non-XML ayant été modifiés de sorte à accepter un fichier de données dont les champs sont organisés dans un ordre différent de celui des colonnes de la table correspondante. Le fichier de format modifié permet de mapper les champs de données sur les colonnes correspondantes de la table.
Notes
Vous pouvez utiliser un fichier de format XML ou non-XML pour procéder à l'importation en bloc d'un fichier de données dans la table à l'aide d'une commande bcp, d'une instruction BULK INSERT ou d'une instruction INSERT ... SELECT * FROM OPENROWSET(BULK...). Pour plus d'informations, consultez Utilisation d'un fichier de format pour importer des données en bloc.
Exemples de table et de fichier de données
Les fichiers de format modifiés pris en exemple dans cette rubrique sont fondés sur la table et le fichier de données suivants.
Table d'exemple
Dans les exemples de cette rubrique, une table nommée myTestOrder doit être créée dans l'exemple de base de données AdventureWorks sous le schéma dbo. Pour créer cette table, dans l'Éditeur de requêtes SQL Server Management Studio, exécutez le code suivant :
USE AdventureWorks2008R2;
GO
CREATE TABLE myTestOrder
(
Col1 smallint,
Col2 nvarchar(50) ,
Col3 nvarchar(50) ,
Col4 nvarchar(50)
);
GO
Fichier de données
Le fichier de données, myTestOrder-c.txt, contient les enregistrements suivants :
DataField3,DataField2,1,DataField4
DataField3,DataField2,1,DataField4
DataField3,DataField2,1,DataField4
Pour importer des données en bloc depuis myTestSkipCol2-c.dat dans la table myTestSkipCol, le fichier de format doit mapper le premier champ de données à Col3, le deuxième champ à Col2, le troisième champ à Col1, et le quatrième champ à Col4.
Utilisation d'un fichier de format non-XML
Pour modifier l'ordre d'un mappage de colonne, vous devez modifier la valeur d'ordre de la colonne afin d'indiquer la position du champ de données correspondant.
L'exemple suivant présente un fichier de format non-XML, myTestOrder.fmt, qui mappe les champs de myTestOrder-c.txt aux colonnes de la table myTestOrder. Pour plus d'informations sur la table et le fichier de données et la manière de les créer, consultez la section « Exemples de fichier de données et de table », plus haut dans cette rubrique. Ce fichier de format utilise le format de données caractères.
Le fichier de format contient les informations suivantes :
9.0
4
1 SQLCHAR 0 100 "," 3 Col3 SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "," 2 Col2 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 7 "," 1 Col1 ""
4 SQLCHAR 0 100 "\r\n" 4 Col4 SQL_Latin1_General_CP1_CI_AS
Notes
Pour plus d'informations sur la structure des fichiers de format non-XML, consultez Description des fichiers de format non XML.
Exemple
L'exemple suivant utilise une instruction BULK INSERT pour procéder à l'importation en bloc de données issues du fichier de données myTestOrder-c.txt vers l'exemple de table myTestOrder à l'aide du fichier de format non-XML myTestOrder.fmt.
Dans l'Éditeur de requête SQL Server Management Studio, exécutez :
USE AdventureWorks2008R2;
GO
BULK INSERT myTestOrder
FROM 'C:\myTestOrder-c.txt'
WITH (formatfile='C:\myTestOrder.fmt');
GO
Utilisation d'un fichier de format XML
L'exemple suivant présente un fichier de format non-XML, myTestOrder.xml, qui mappe les champs de myTestOrder-c.txt sur les colonnes de la table myTestOrder. Pour plus d'informations sur la création du fichier de données et de la table, consultez « Exemples de table et de fichier de données » plus haut dans cette rubrique.
Le fichier de format myTestOrder.xml contient les informations suivantes :
<?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="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="3" NAME="Col1" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="1" NAME="Col3" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
Notes
Pour plus d'informations sur la syntaxe du schéma XML et pour d'autres exemples de fichiers de format XML, consultez Description des fichiers de format XML.
Exemple
L'exemple suivant utilise le fournisseur d'ensemble de lignes en bloc OPENROWSET pour procéder à l'importation du fichier de données myTestOrder-c.txt vers l'exemple de table myTestOrder à l'aide du fichier de format XML myTestOrder.xml. L'instruction INSERT… SELECT spécifie la liste de colonnes de la liste de sélection.
Dans l'Éditeur de requête SQL Server Management Studio, exécutez le code suivant :
USE AdventureWorks2008R2;
GO
INSERT INTO myTestOrder
SELECT Col1, Col2, Col3, Col4
FROM OPENROWSET(BULK 'C:\myTestOrder-c.txt',
FORMATFILE='C:\myTestOrder.Xml'
) AS t1;
GO