Conserver des valeurs d'identité lors de l'importation de données en bloc (SQL Server)
Les fichiers de données contenant des valeurs d'identité peuvent être importés en bloc dans une instance de Microsoft SQL Server. Par défaut, les valeurs de la colonne d'identité du fichier de données importé sont ignorées et SQL Server affecte automatiquement des valeurs uniques. Ces valeurs uniques reposent sur les valeurs de départ et d'incrément spécifiées lors de la création de la table.
Si les fichiers de données ne contiennent pas de valeurs pour la colonne d'identificateur de la table, vous devez utiliser un fichier de format pour préciser si la colonne d'identificateur de la table doit être ignorée lors de l'importation de données. SQL Server assigne automatiquement des valeurs uniques pour la colonne.
Pour empêcher SQL Server d'assigner des valeurs d'identité lors de l'importation en bloc de lignes de données dans une table, utilisez le qualificateur de commande de conservation d'identité approprié. Lorsque vous spécifiez un qualificateur de conservation d'identité, SQL Server utilise les valeurs d'identité du fichier de données. Ces qualificateurs sont les suivants :
Commande |
Qualificateur de conservation d'identité |
Type de qualificateur |
---|---|---|
bcp |
-E |
Commutateur |
BULK INSERT |
KEEPIDENTITY |
Argument |
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
KEEPIDENTITY |
Indicateur de table |
Pour plus d'informations, consultez Utilitaire bcp, BULK INSERT (Transact-SQL), OPENROWSET (Transact-SQL), INSERT (Transact-SQL), SELECT (Transact-SQL) et Indicateurs de table (Transact-SQL).
[!REMARQUE]
Pour créer un numéro à incrémentation automatique qui peut être utilisé dans plusieurs tables ou être appelé par des applications sans faire référence à une table, consultez Numéros de séquence.
Exemples
Les exemples de cette rubrique importent les données en bloc au moyen de INSERT ... SELECT * FROM OPENROWSET(BULK...), et conservent les valeurs par défaut.
Table d'exemple
Dans ces exemples d'importation en bloc, la table myTestKeepNulls est créée dans la base de données d'exemple AdventureWorks sous le schéma dbo. Pour créer cette table. dans l'éditeur de requête SQL Server Management Studio, exécutez le code suivant :
USE AdventureWorks;
GO
SELECT * INTO HumanResources.myDepartment
FROM HumanResources.Department
WHERE 1=0;
GO
SELECT * FROM HumanResources.myDepartment;
Dans la table Department sur laquelle repose myDepartment, l'option IDENTITY_INSERT est désactivée (valeur OFF). Par conséquent, pour importer des données dans une colonne d'identité, vous devez spécifier KEEPIDENTITY ou -E.
Fichier de données d'exemple
Le fichier de données utilisé dans les exemples d'importation en bloc contient des données exportées en bloc à partir de la table HumanResources.Department dans leur format natif. Pour créer le fichier de données, à l'invite de commandes Microsoft Windows, entrez :
bcp AdventureWorks.HumanResources.Department out myDepartment-n.Dat -n -T
Fichier de format d'exemple
Dans cet exemple d'importation en bloc, le fichier de format XML (myDepartment-f-x-n.Xml) utilise des formats de données natifs. Ce fichier de format est ici créé à l'aide de la commande bcp, à partir de la table HumanResources.Department de la base de données AdventureWorks. À l'invite de commandes Windows, entrez :
bcp AdventureWorks.HumanResources.Department format nul -n -x -f myDepartment-f-n-x.Xml -T
Pour plus d'informations sur la création d'un fichier de format, consultez Créer un fichier de format (SQL Server).
A.Utilisation de bcp et conservation des valeurs d'identité
Cet exemple montre comment conserver les valeurs d'identité dans le cadre d'une importation de données en bloc avec la commande bcp. La commande bcp, qui utilise le fichier de format myDepartment-f-n-x.Xml, contient les commutateurs suivants :
Qualificateurs |
Description |
---|---|
-E |
Précise que les valeurs d'identité du fichier de données doivent être utilisées pour la colonne d'identité. |
-T |
Précise que l'utilitaire bcp se connecte à SQL Server au moyen d'une connexion approuvée. |
À l'invite de commandes Windows, entrez :
bcp AdventureWorks.HumanResources.myDepartment in C:\myDepartment-n.Dat -f C:\myDepartment-f-n-x.Xml -E -T
B.Utilisation de BULK INSERT et conservation des valeurs d'identité
Dans l'exemple suivant, l'instruction BULK INSERT est utilisée pour importer des données en bloc dans la table AdventureWorks.HumanResources.myDepartment à partir du fichier myDepartment-c.Dat. L'instruction utilise le fichier de format myDepartment-f-n-x.Xml et inclut l'option KEEPIDENTITY pour assurer la conservation des valeurs d'identité éventuellement présentes dans le fichier de données.
Dans l'éditeur de requête SQL Server Management Studio, exécutez :
USE AdventureWorks;
GO
DELETE HumanResources.myDepartment;
GO
BULK INSERT HumanResources.myDepartment
FROM 'C:\myDepartment-n.Dat'
WITH (
KEEPIDENTITY,
FORMATFILE='C:\myDepartment-f-n-x.Xml'
);
GO
SELECT * FROM HumanResources.myDepartment;
C.Utilisation de OPENROWSET et conservation des valeurs d'identité
Dans l'exemple suivant, le fournisseur d'ensembles de lignes en bloc OPENROWSET sert à importer des données en bloc dans la table AdventureWorks.HumanResources.myDepartment à partir du fichier myDepartment-c.Dat. L'instruction utilise le fichier de format myDepartment-f-n-x.Xml et inclut l'indicateur KEEPIDENTITY pour assurer la conservation des valeurs d'identité éventuellement présentes dans le fichier de données.
Dans l'Éditeur de requête SQL Server Management Studio, exécutez :
USE AdventureWorks;
GO
DELETE HumanResources.myDepartment;
GO
INSERT INTO HumanResources.myDepartment
with (KEEPIDENTITY)
(DepartmentID, Name, GroupName, ModifiedDate)
SELECT *
FROM OPENROWSET(BULK 'C:\myDepartment-n.Dat',
FORMATFILE='C:\myDepartment-f-n-x.Xml') as t1;
GO
Tâches associées
Pour utiliser un fichier de format
Utiliser un fichier de format pour importer des données en bloc (SQL Server)
Utiliser un fichier de format pour ignorer un champ de données (SQL Server)
Utiliser un fichier de format pour ignorer une colonne de table (SQL Server)
Pour utiliser des formats de données pour l'importation ou l'exportation en bloc
Importer des données au format natif et caractère à partir de versions antérieures de SQL Server
Utiliser le format caractère pour importer ou exporter des données (SQL Server)
Utiliser le format natif pour importer ou exporter des données (SQL Server)
Utiliser le format caractère Unicode pour importer ou exporter des données (SQL Server)
Utiliser le format natif Unicode pour importer ou exporter des données (SQL Server)
Pour spécifier des formats de données pour la compatibilité lors de l'utilisation de bcp
Spécifier des indicateurs de fin de champ et de fin de ligne (SQL Server)
Spécifier une longueur de préfixe dans des fichiers de données à l'aide de bcp (SQL Server)
Spécifier le type de stockage de fichiers à l'aide de bcp (SQL Server)