Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S'applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Base de données SQL dans Microsoft Fabric
L’utilitaire de programme de copie en bloc (bcp) copie en bloc les données entre une instance de SQL Server et un fichier de données dans un format spécifié par l’utilisateur.
Remarques
Pour plus d’informations sur l’emplacement de recherche ou l’exécution de l’utilitaire bcp et sur les conventions de syntaxe des utilitaires d’invite de commandes, consultez les utilitaires de ligne de commande SQL (moteur de base de données).
Pour plus d’informations sur la préparation des données en vue d’une importation ou d’une exportation en bloc, consultez Préparer des données en vue d’une exportation ou d’une importation en bloc.
Pour savoir à quel moment les opérations d’insertion de ligne effectuées par l’importation en bloc sont consignées dans le journal des transactions, consultez Conditions requises pour une journalisation minimale dans l’importation en bloc.
Les caractères
<, ,>|,&, et^sont des caractères d’interpréteur de commandes spéciaux, et ils doivent être précédés du caractère d’échappement (^) ou placés entre guillemets lorsqu’ils sont utilisés dans une chaîne (par exemple,"StringContaining&Symbol"). Si vous placez une chaîne contenant un caractère spécial entre guillemets, les guillemets sont définis comme faisant partie de la valeur de la variable d’environnement. Pour plus d’informations, consultez Utilisation de caractères spéciaux supplémentaires.
Prise en charge de fichier de données natif
Dans SQL Server, l’utilitaire bcp prend en charge les fichiers de données natifs compatibles avec les versions de SQL Server à partir de SQL Server 2000 (8.x) et ultérieur.
Colonnes calculées et colonnes horodatage
Les valeurs dans le fichier de données importé pour des colonnes calculées ou timestamp sont ignorées, et SQL Server attribue automatiquement des valeurs. Si le fichier de données ne contient pas de valeurs pour les colonnes calculées ou timestamp de la table, utilisez un fichier de format pour spécifier que les colonnes calculées ou timestamp de la table ne doivent pas être prises en compte lors de l’importation des données ; auquel cas, SQL Server attribue automatiquement des valeurs à la colonne.
Les colonnes calculées et timestamp sont copiées en bloc de SQL Server vers un fichier de données comme d’ordinaire.
Spécifier des identificateurs contenant des espaces ou des guillemets
Les identificateurs SQL Server peuvent inclure des caractères tels que des espaces et des guillemets intégrés. De tels identificateurs doivent être traités de la manière suivante :
Quand vous spécifiez, à l'invite de commandes, un identificateur ou un nom de fichier comportant un espace ou une apostrophe, mettez cet identificateur entre guillemets doubles (" ").
Par exemple, la commande
bcp outsuivante crée un fichier de données nomméCurrency Types.dat:bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -cPour spécifier un nom de base de données comportant un espace ou un guillemet simple, vous devez utiliser l’option
-q.Pour les noms de propriétaires, de tables ou de vues contenant des espaces ou des guillemets, vous pouvez :
Spécifier l'option
-q, ouPlacer le nom de propriétaire, de table ou de vue entre crochets (
[]), à l'intérieur des guillemets.
Validation des données
bcp applique désormais une validation des données et des contrôles de données qui peuvent entraîner l’échec de scripts existants si ceux-ci sont exécutés sur des données non valides dans un fichier de données. Par exemple, bcp vérifie maintenant que :
Les représentations en mode natif des types de données float ou real sont valides.
Les données Unicode ont une longueur de nombre d'octets paire.
Les types de données non valides qui pouvaient être importées dans les versions précédentes de SQL Server risquent de ne pas pouvoir être chargés désormais ; tandis que dans les versions précédentes, l'échec ne se produisait que lorsqu'un client tentait d'accéder aux données non valides. La validation supplémentaire réduit les risques d’incidents lors de l’interrogation des données après un chargement en bloc.
Exportation et importation en bloc de documents SQLXML
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.
| Type de données | Résultat |
|---|---|
SQLCHAR ou SQLVARYCHAR |
Les données sont envoyées dans la page de codes client ou dans la page de codes implicite par le classement. L'effet est le même que si vous définissiez le commutateur -c sans spécifier de fichier de format. |
SQLNCHAR ou SQLNVARCHAR |
Les données sont envoyées au format Unicode. L'effet est le même que si vous définissiez le commutateur -w sans spécifier de fichier de format. |
SQLBINARY ou SQLVARYBIN |
Les données sont envoyées sans être converties. |
Meilleures pratiques relatives au mode caractère (-c) et au mode natif (-n)
Cette section contient des recommandations pour le mode caractère (-c) et le mode natif (-n).
(Administrateur/Utilisateur) Lorsque cela est possible, utilisez le format natif (
-n) pour éviter le problème de séparateur. Utilisez le format natif pour exporter et importer à l'aide de SQL Server. Exportez des données à partir de SQL Server à l’aide de l’option-cou-wsi vous envisagez d’exporter les données vers une base de données non-SQL Server.(Administrateur) Vérifiez les données lors de l'utilisation de
bcp out. Par exemple, lorsque vous utilisezbcp out,bcp in, puisbcp out, vérifiez que les données sont correctement exportées et que les valeurs de fin ne sont pas utilisées comme partie d'une valeur de données. Remplacez les terminateurs par défaut (en utilisant les options-tet-r) par des valeurs hexadécimales aléatoires afin d’éviter les conflits entre les valeurs de terminateurs et les valeurs de données.(Utilisateur) Utilisez un terminateur long et unique (n'importe quelle séquence d'octets ou de caractères) pour minimiser les risques de conflits avec la valeur de chaîne actuelle. Cette tâche peut être réalisée à l'aide des options
-tet-r.
Exemples
Les exemples de cette section utilisent l’exemple de base de données WideWorldImporters pour SQL Server 2016 (13.x) et versions ultérieures, Azure SQL Database et Azure SQL Managed Instance.
WideWorldImporters peut être téléchargé depuis https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Consultez les instructions RESTORE pour obtenir la syntaxe permettant de restaurer l'exemple de base de données.
Exemples de conditions de test
Sauf mention spécifique contraire, ces exemples partent du principe que vous utilisez l’authentification Windows et que vous disposez d’une connexion approuvée à l’instance du serveur sur laquelle vous exécutez la commande bcp. Un répertoire nommé D:\bcp est utilisé dans de nombreux exemples. Remplacez <server_name> et d’autres valeurs d’espace réservé par des valeurs pour votre environnement.
Le script Transact-SQL suivant crée une copie vide de la WideWorldImporters.Warehouse.StockItemTransactions table, puis ajoute une contrainte de clé primaire :
USE WideWorldImporters;
GO
SET NOCOUNT ON;
IF NOT EXISTS (SELECT *
FROM sys.tables
WHERE name = 'Warehouse.StockItemTransactions_bcp')
BEGIN
SELECT *
INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
FROM WideWorldImporters.Warehouse.StockItemTransactions
WHERE 1 = 2;
ALTER TABLE Warehouse.StockItemTransactions_bcp
ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp
PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
END
Vous pouvez tronquer la table StockItemTransactions_bcp autant que nécessaire :
TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;
A. Identifier la version de l’utilitaire bcp
Depuis une invite de commandes, entrez la commande suivante :
bcp -v
B. Copier des lignes de table dans un fichier de données (avec une connexion approuvée)
Les exemples suivants illustrent l’utilisation de l’option out sur la table WideWorldImporters.Warehouse.StockItemTransactions.
Basic
Cet exemple crée un fichier de données nommé
StockItemTransactions_character.bcpet y copie les données de table au format caractère .Depuis une invite de commandes, entrez la commande suivante :
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
Cet exemple crée un fichier de données nommé
StockItemTransactions_native.bcpet y copie les données de table au format natif . L’exemple spécifie également le nombre maximum d’erreurs de syntaxe, un fichier d’erreurs et un fichier de sortie.Depuis une invite de commandes, entrez la commande suivante :
bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\bcp\StockItemTransactions_native.bcp -m 1 -n -e D:\bcp\Error_out.log -o D:\bcp\Output_out.log -S <server_name> -T
Passez en revue Error_out.log et Output_out.log.
Error_out.log doit être laissé vide. Comparez les tailles de fichiers entre StockItemTransactions_character.bcp et StockItemTransactions_native.bcp.
Chapitre C. Copier des lignes de table dans un fichier de données (avec une authentification en mode mixte)
L'exemple suivant illustre l'option out sur la table WideWorldImporters.Warehouse.StockItemTransactions. Cet exemple crée un fichier de données nommé StockItemTransactions_character.bcp et y copie les données de table au format caractère .
L’exemple part du principe que vous utilisez l’authentification en mode mixte ; vous devez utiliser le commutateur -U pour spécifier votre ID de connexion. De même, à moins que vous vous connectiez à l’instance par défaut de SQL Server sur l’ordinateur local, utilisez le commutateur -S pour spécifier le nom du système et, éventuellement, un nom d’instance.
À partir d’une invite de commandes, entrez la commande suivante : Le système demande votre mot de passe.
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>
D. Copier des données depuis un fichier dans une table
Les exemples suivants illustrent l’option in sur la table WideWorldImporters.Warehouse.StockItemTransactions_bcp, à l’aide de fichiers créés précédemment.
Basic
Cet exemple utilise le fichier de données
StockItemTransactions_character.bcpcréé précédemment.Depuis une invite de commandes, entrez la commande suivante :
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
Cet exemple utilise le fichier de données
StockItemTransactions_native.bcpcréé précédemment. L’exemple utilise également l’indicateurTABLOCKet spécifie la taille du lot, le nombre maximal d’erreurs de syntaxe, un fichier d’erreur et un fichier de sortie.Depuis une invite de commandes, entrez la commande suivante :
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\bcp\Error_in.log -o D:\bcp\Output_in.log -S <server_name> -TPassez en revue
Error_in.logetOutput_in.log.
E. Copier une colonne spécifique dans un fichier de données
Pour copier une colonne spécifique, vous pouvez utiliser l'option queryout. L'exemple suivant copie uniquement la colonne StockItemTransactionID de la table Warehouse.StockItemTransactions dans un fichier de données.
Depuis une invite de commandes, entrez la commande suivante :
bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T
F. Copier une ligne spécifique dans un fichier de données
Pour copier une ligne spécifique, vous pouvez utiliser l'option queryout. L’exemple suivant copie uniquement la ligne de la personne nommée Amy Trefl de la table WideWorldImporters.Application.People dans un fichier de données Amy_Trefl_c.bcp.
Note
Le -d commutateur est utilisé pour identifier la base de données.
Depuis une invite de commandes, entrez la commande suivante :
bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T
G. Copier des données d’une requête dans un fichier de données
Pour copier le jeu de résultats d’une instruction Transact-SQL dans un fichier de données, utilisez l’option queryout . L’exemple suivant copie les noms de la table WideWorldImporters.Application.People , triée en fonction du nom, dans le fichier de données People.txt .
Note
Le commutateur -t est utilisé pour créer un fichier délimité par des virgules.
Depuis une invite de commandes, entrez la commande suivante :
bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T
H. Créer les fichiers de format
L’exemple suivant crée trois fichiers de format distincts pour la table Warehouse.StockItemTransactions dans la base de données WideWorldImporters . Passez en revue le contenu de chaque fichier créé.
À partir d’une invite de commandes, entrez les commandes suivantes :
REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.fmt -c -T
REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_n.fmt -n -T
REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.xml -x -c -T
Note
Le -x interrupteur est pris en charge uniquement sur Windows.
Pour plus d’informations, consultez Utiliser des fichiers de format non XML (SQL Server) et des fichiers de format XML (SQL Server).
I. Utiliser un fichier de format pour une importation en bloc avec bcp
Pour utiliser un fichier de format précédemment créé lors de l’importation de données dans une instance de SQL Server, utilisez le commutateur -f avec l’option in . Par exemple, la commande suivante copie en bloc le contenu d’un fichier de données, StockItemTransactions_character.bcp, dans une copie de la table Warehouse.StockItemTransactions_bcp en utilisant le fichier de format précédemment créé, StockItemTransactions_c.xml.
Note
Le commutateur -L est utilisé pour importer uniquement les 100 premiers enregistrements.
Depuis une invite de commandes, entrez la commande suivante :
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T
Note
Les fichiers de format s'avèrent utiles lorsque les champs des fichiers de données diffèrent des colonnes de table ; par exemple, par leur nombre, leur ordre ou leurs types de données. Pour plus d’informations, consultez Fichiers de format pour importer ou exporter des données (SQL Server).
J. Spécifier une page de codes
L’exemple d’extrait de code suivant illustre l’importation bcp lors de la spécification d’une page de codes 65001 :
bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...
K. Exemple de fichier de sortie utilisant des marques de fin de champ et de ligne personnalisées
Cet exemple montre deux exemples de fichiers, générés par bcp à l’aide de marques de fin de champ et de ligne personnalisées.
Créez une table
dbo.T1dans la base de donnéestempdbavec deux colonnes,IDetName.USE tempdb; GO CREATE TABLE dbo.T1 ( ID INT, [Name] NVARCHAR (20) ); GO INSERT INTO dbo.T1 VALUES (1, N'Natalia'); INSERT INTO dbo.T1 VALUES (2, N'Mark'); INSERT INTO dbo.T1 VALUES (3, N'Randolph'); GOGénérez un fichier de sortie à partir de l’exemple de table
dbo.T1, en utilisant une marque de fin de champ personnalisée.Dans cet exemple,
-t ,spécifie l’indicateur de fin de champ personnalisé. Remplacez par<server_name>une valeur pour votre environnement.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,Voici l'ensemble des résultats.
1,Natalia 2,Mark 3,RandolphGénérez un fichier de sortie à partir de l’exemple de table
dbo.T1, en utilisant des marques de fin de champ et de ligne personnalisées.Dans cet exemple,
-t ,spécifie l’indicateur de fin de champ personnalisé et-r :spécifie l’indicateur de fin de ligne personnalisé. Remplacez par<server_name>une valeur pour votre environnement.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :Voici l'ensemble des résultats.
1,Natalia:2,Mark:3,Randolph:Note
Le séparateur de ligne est toujours ajouté, même au dernier enregistrement. Toutefois, la marque de fin de champ n’est pas ajoutée au dernier champ.
Exemples supplémentaires
Les articles suivants contiennent des exemples d’utilisation de bcp :
Formats de données pour l’importation en bloc ou l’exportation en bloc (SQL Server)
- Utiliser le format natif pour importer ou exporter des données (SQL Server)
- Utiliser le format caractère pour importer ou exporter des données (SQL Server)
- Utiliser le format natif Unicode pour importer ou exporter des données (SQL Server)
- Utiliser le format caractère Unicode pour importer ou exporter des données (SQL Server)
Spécifier les indicateurs de fin de champ et de ligne (SQL Server)
Conserver les valeurs null ou les valeurs par défaut lors de l’importation en bloc (SQL Server)
Conserver des valeurs d'identité lors de l'importation de données en bloc (SQL Server)
Mettre en forme des fichiers pour l’importation ou l’exportation de données (SQL Server)
- Créer un fichier de format avec bcp (SQL Server)
- Utiliser un fichier de format pour importer des données en bloc (SQL Server)
- 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)
- Utiliser un fichier de format pour mapper les colonnes d’une table aux champs d’un fichier de données (SQL Server)
Examples d’importation et d’exportation en bloc de documents XML (SQL Server)
Contenu connexe
- Préparer des données à une exportation ou une importation en bloc
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- Fichiers de format pour importer ou exporter des données (SQL Server)
Obtenir de l’aide
- Idées pour SQL : avez-vous des suggestions pour améliorer SQL Server ?
- Questions et réponses Microsoft (SQL Server)
- DBA Stack Exchange (tag sql-server) : posez vos questions sur SQL Server
- Stack Overflow (tag sql-server) : réponses aux questions sur le développement SQL
- Conditions et informations sur la licence de Microsoft SQL Server
- Options de support pour les utilisateurs professionnels
- Aide et commentaires supplémentaires pour SQL Server
Contribuer à la documentation SQL
Saviez-vous que vous pouvez modifier le contenu SQL vous-même ? Si vous le faites, non seulement vous aidez à améliorer notre documentation, mais vous obtenez également un crédit en tant que contributeur à la page.
Pour plus d’informations, consultez Modifier la documentation Microsoft Learn.