Utilitaire bcp
L'utilitaire bcp copie en bloc des données entre une instance de Microsoft SQL Server et un fichier de données dans un format spécifié par l'utilisateur. L'utilitaire bcp peut être utilisé pour importer un grand nombre de nouvelles lignes dans des tables SQL Server ou pour exporter des données de tables dans des fichiers de données. Sauf lorsqu'il est utilisé avec l'option queryout, l'utilitaire ne nécessite aucune connaissance de Transact-SQL. Pour importer des données dans une table, vous devez utiliser un fichier de format créé pour cette table ou comprendre la structure de la table et les types de données valides pour ses colonnes.
Pour connaître les conventions de syntaxe utilisées pour la syntaxe de bcp, consultez Conventions de syntaxe de Transact-SQL (Transact-SQL).
Remarque |
|---|
Si vous utilisez bcp pour sauvegarder vos données, créez un fichier de format pour enregistrer le format de données. Les fichiers de données bcp n'incluent pas de schéma ni d'informations de format, ce qui fait que si une table ou une vue est supprimée et si vous n'avez pas de fichier de format, il se peut que vous ne soyez pas en mesure d'importer les données. |
bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-mmax_errors] [-fformat_file] [-x] [-eerr_file]
[-Ffirst_row] [-Llast_row] [-bbatch_size]
[-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )]
[-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term]
[-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
[-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]
[-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]
Le client bcp 10.0 est installé lorsque vous installez les outils Microsoft SQL Server 2008 R2. Si les outils sont installés à la fois pour SQL Server 2008 R2 et pour SQL Server 2005, en fonction de la valeur de la variable d'environnement PATH, vous utilisez peut-être le client bcp antérieur au lieu du client bcp 10.0. Cette variable d'environnement définit l'ensemble de répertoires utilisés par Windows pour rechercher des fichiers exécutables. Pour connaître la version que vous utilisez, exécutez la commande bcp /v à l'invite de commandes Windows. Pour plus d'informations sur la définition du chemin de commande dans la variable d'environnement PATH, consultez l'aide de Windows.
Les fichiers de format XML ne sont pris en charge que si les outils SQL Server sont installés conjointement avec SQL Server Native Client.
Pour savoir où trouver l'utilitaire bcp ou comment l'exécuter, et pour connaître les conventions syntaxiques des utilitaires d'invite de commandes, consultez Utilitaires d'invite de commandes.
Pour plus d'informations sur la préparation des données pour les opérations d'exportation et d'importation en bloc, consultez Préparation des données en vue d'une exportation ou d'une importation en bloc.
Pour obtenir des informations sur le moment où les opérations d'insertion de ligne effectuées par l'importation en bloc sont enregistrées dans le journal des transactions, consultez Conditions requises pour une journalisation minimale dans l'importation en bloc.
Prise en charge de fichier de données natif
Dans SQL Server 2008 R2, l'utilitaire bcp prend en charge les fichiers de données natifs compatibles avec SQL Server 2000, SQL Server 2005, SQL Server 2008 etSQL Server 2008 R2 uniquement.
Colonnes calculées et colonnes timestamp
Les valeurs dans le fichier de données en cours d'importation 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 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 à partir de SQL Server vers un fichier de données comme d'ordinaire.
Spécification d'identificateurs contenant des espaces ou des guillemets
Les identificateurs de SQL Server peuvent inclure des caractères tels que des espaces et des guillemets incorporé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 out suivante crée un fichier de données nommé Currency Types.dat :
bcp AdventureWorks2008R2.Sales.Currency out "Currency Types.dat" -T -c
Pour 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 incorporant des espaces ou des guillemets simples, vous pouvez :
Spécifier l'option -q, ou
Placer le nom de propriétaire, de table ou de vue entre crochets ([]), à l'intérieur des guillemets simples.
Validation des données
bcp applique désormais une validation des données et des contrôles de données qui pourraient entraîner l'échec de scripts existants s'ils sont exécutés sur des données non valides dans un fichier de données. Par exemple, bcp vérifie maintenant que :
La représentation en mode natif des données de type float ou real est valide.
Les données Unicode comportent un nombre d'octets pair.
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ées 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 masse.
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 | Effet |
|---|---|
SQLCHAR ou SQLVARYCHAR | Les données sont envoyées dans la page de codes du client ou dans la page de codes inhérente au 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. |
Une opération bcp out nécessite l'autorisation SELECT sur la table source.
Une opération bcp in nécessite au minimum des autorisations SELECT/INSERT sur la table cible. En outre, l'autorisation ALTER TABLE est requise si l'une des conditions suivantes est vraie :
Les contraintes existent et l'indicateur CHECK_CONSTRAINTS n'est pas spécifié.
RemarqueLa désactivation des contraintes est le comportement par défaut. Pour activer les contraintes explicitement, utilisez l'option -h avec l'indicateur CHECK_CONSTRAINTS.
Les déclencheurs existent et l'indicateur FIRE_TRIGGER n'est pas spécifié.
RemarquePar défaut, les déclencheurs ne sont pas activés. Pour activer les déclencheurs explicitement, utilisez l'option -h avec l'indicateur FIRE_TRIGGERS.
Vous utilisez l'option -E pour importer des valeurs d'identité à partir d'un fichier de données.
Remarque |
|---|
L'autorisation ALTER TABLE obligatoire sur la table cible était nouvelle dans SQL Server 2005. Les scripts bcp qui n'appliquent pas de déclencheurs et de contrôles de contrainte risquent d'échouer si le compte d'utilisateur ne possède pas d'autorisation de table ALTER pour la table cible. |
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 les données à partir de SQL Server à l'aide de l'option -c ou -w si les données doivent être importées dans une base de données non SQL Server.
(Administrateur) Vérifiez les données à l'aide de BCP OUT. Par exemple, lorsque vous utilisez BCP OUT, BCP IN, puis BCP OUT vérifiez que les données sont correctement exportées et que les valeurs de terminateurs ne sont pas utilisées comme parties des valeurs de données. Remplacez les terminateurs par défaut (à l'aide des options -t et -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 -t et -r.
Cette section contient les exemples suivants :
A. Copie de lignes de table dans un fichier de données (avec une connexion approuvée)
B. Copie de lignes de table dans un fichier de données (avec l'authentification en mode mixte)
C. Copie de données depuis un fichier dans une table
D. Copie d'une colonne spécifique dans un fichier de données
E. Copie d'une ligne spécifique dans un fichier de données
F. Copie de données d'une requête dans un fichier de données
G. Création d'un fichier de format non XML
H. Création d'un fichier de format XML
I. Utilisation d'un fichier de format pour une importation en bloc avec bcp
A. Copie de lignes de table dans un fichier de données (avec une connexion approuvée)
L'exemple suivant illustre l'option out sur la table AdventureWorks2008R2.Sales.Currency. Cet exemple crée un fichier de données nommé Currency.dat et y copie les données de table au format caractère. Cet exemple part 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.
À partir d'une invite de commandes, entrez la commande suivante :
bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -T -c
B. Copie de lignes de table dans un fichier de données (avec l'authentification en mode mixte)
L'exemple suivant illustre l'option out sur la table Sales.Currency. Cet exemple crée un fichier de données nommé Currency.dat 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. En outre, sauf si vous vous connectez à 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.
bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>
Le système demande votre mot de passe.
C. Copie de données depuis un fichier dans une table
L'exemple suivant illustre l'option in en utilisant le fichier créé dans l'exemple précédent (Currency.dat). Cependant, cet exemple crée d'abord une copie vide de la table Sales.Currency, Sales.Currency2, dans laquelle les données sont copiées. Cet exemple part 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.
Pour créer la table vide, dans l'éditeur de requête, entrez la commande suivante :
USE AdventureWorks2008R2; GO SELECT * INTO AdventureWorks2008R2.Sales.Currency2 FROM AdventureWorks2008R2.Sales.Currency WHERE 1=2
Pour copier en bloc les données caractères dans la nouvelle table, c'est-à-dire pour importer les données, entrez la commande suivante à l'invite de commandes :
bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -c
Pour vérifier la réussite de la commande, affichez le contenu de la table dans l'éditeur de requête et entrez :
USE AdventureWorks2008R2; GO SELECT * FROM Sales.Currency2;
D. Copie d'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 Name de la table Sales.Currency dans un fichier de données. Cet exemple part 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.
À l'invite de commandes Windows, entrez :
bcp "SELECT Name FROM AdventureWorks2008R2.Sales.Currency" queryout Currency.Name.dat -T -c
E. Copie d'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 du contact nommé Jarrod Rana de la table Person.Person dans un fichier de données (Jarrod Rana.dat).Cet exemple part 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.
À l'invite de commandes Windows, entrez :
bcp "SELECT * FROM AdventureWorks2008R2.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' " queryout "Jarrod Rana.dat" -T -c
F. Copie de 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 AdventureWorks2008R2.Person.Person, triés en fonction du nom, puis du prénom, dans le fichier de données Contacts.txt. Cet exemple part 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.
À l'invite de commandes Windows, entrez :
bcp "SELECT FirstName, LastName FROM AdventureWorks2008R2.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T
G. Création d'un fichier de format non XML
L'exemple suivant crée un fichier de format non XML nommé Currency.fmt pour la table Sales.Currency dans la base de données AdventureWorks2008R2. Cet exemple part du principe que vous utilisez l'authentification Windows et que vous avez une connexion approuvée à l'instance du serveur sur laquelle vous exécutez la commande bcp.
À l'invite de commandes Windows, entrez :
bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -f Currency.fmt
Pour plus d'informations, consultez Description des fichiers de format non XML.
H. Création d'un fichier de format XML
L'exemple suivant crée un fichier de format XML nommé Currency.xml pour la table Sales.Currency dans la base de données AdventureWorks2008R2. Cet exemple part du principe que vous utilisez l'authentification Windows et que vous avez une connexion approuvée à l'instance du serveur sur laquelle vous exécutez la commande bcp.
À l'invite de commandes Windows, entrez :
bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -x -f Currency.xml
Remarque |
|---|
Pour utiliser le commutateur -x, vous devez utiliser un client bcp 9.0. Pour plus d'informations sur l'utilisation du client bcp 9.0, consultez la section « Remarques ». |
Pour plus d'informations, consultez Description des fichiers de format XML.
I. Utilisation d'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, Currency.dat, dans une copie de la table Sales.Currency (Sales.Currency2) en utilisant le fichier de format précédemment créé (Currency.xml). Cet exemple part 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.
À l'invite de commandes Windows, entrez :
bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -f Currency.xml
Remarque |
|---|
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 l'importation ou l'exportation de données. |
Les rubriques suivantes contiennent des exemples de l'utilisation de bcp :
Exemples d'importation et d'exportation en bloc de documents XML
Conservation des valeurs d'identité lors de l'importation de données en bloc
Conservation des valeurs NULL ou utilisation des valeurs par défaut lors de l'importation en bloc
Spécification des indicateurs de fin de champ et de fin de ligne
Utilisation d'un fichier de format pour importer des données en bloc
Utilisation du format caractère pour importer ou exporter des données
Utilisation du format natif pour importer ou exporter des données
Utilisation du format caractère Unicode pour importer ou exporter des données
Utilisation du format natif Unicode pour importer ou exporter des données