Utiliser un fichier de format pour mapper les colonnes d'une table aux champs d'un fichier de données (SQL Server)
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
Un fichier de format non XML ou un fichier de format XML peut être utilisé pour importer en bloc un fichier de données dans la table à l’aide d’une commande bcp , d’une instruction BULK INSERT ou d’une instruction INSERT ... INSTRUCTION SELECT * FROM OPENROWSET(BULK...) . Pour plus d’informations, consultez Utiliser un fichier de format pour importer des données en bloc (SQL Server).
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.
Exemple de table
Les exemples de cette rubrique nécessitent la création d’une table nommée myTestOrder
dans l’exemple de base de données AdventureWorks2012 sous le dbo
schéma. Pour créer cette table, dans SQL Server Management Studio Éditeur de requête, exécutez le code suivant :
USE AdventureWorks2012;
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 disposition des fichiers de format non XML, consultez Fichiers de format non XML (SQL Server).
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 le SQL Server Management Studio Éditeur de requête, exécutez :
USE AdventureWorks2012;
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 des exemples supplémentaires de fichiers de format XML, consultez Fichiers de format XML (SQL Server).
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 le SQL Server Management Studio Éditeur de requête, exécutez le code suivant :
USE AdventureWorks2012;
GO
INSERT INTO myTestOrder
SELECT Col1, Col2, Col3, Col4
FROM OPENROWSET(BULK 'C:\myTestOrder-c.txt',
FORMATFILE='C:\myTestOrder.Xml'
) AS t1;
GO
Voir aussi
Utiliser un fichier de format pour ignorer une colonne de table (SQL Server)
Utiliser un fichier de format pour ignorer un champ de données (SQL Server)