lundi 1 décembre 2008

SQL Server - Bulk Copy Program

Bulk Copy Program (BCP pour les intimes) permet:
  • Soit de décharger le contenu d'une table dans une fichier text
  • Soit de recharger un fichier texte dans une table.
Cet utilitaire en ligne de commande est vraiment très utile et rapide... à considérer comme un amis.
Il est par exemple possible de décharger (ou recharger) 20 millions de records dans une table en 35 minutes!

Unload 
Export depuis une table

BCP dbname..tableName out myfile.txt -n -T
options:
-T BCP utilise le Trusted Connection pour se connecter a SQL Server. Les options -U user -P password peuvent également être utilisés.
-n BCP utilise les data types natif de la DB pour faire l'export des données.

Export depuis une requête SQL
bcp "select * from MyDatabase..tblXmlProps where ID_Session < 4356" queryout "d:\backups\unlXmlData\tblXmlProps.txt" -U sa -P ***PASSWORD*** -n


Reload
La réimportation se fait toujours dans une table.
Exemple 1
BCP dbname..tableName in myDatafile.txt -n -T
Options:
-T BCP utilise le Trusted Connection pour se connecter a SQL Server/
-n BCP utilise les data types natif de la DB pour faire l'export des données.

Exemple 2
bcp MyDatabase..tblXmlProps in "d:\backups\unlXmlData\tblXmlProps.txt" -n -b 100 -U sa -P ***PASSWORD***
Options:
-b Batch_Size, nombre de records rechargés par transaction.
-n BCP utilise les data types natifs de SQL server (pour faire la correspondance avec les data types indiqués dans le fichier bcp)

Les champs IDENTITY

Pour recharger des données dans une table contenant un champ IDENTITY, il convient d'autoriser l'assignation de valeur dans le champ identity.
Cela est fait à l'aide de l'instruction suivante:
SET IDENTITY_INSERT dbo.TableName ON

Un fois les informations rechargés, il faut bien entendu réactiver la fonction IDENTITY.
La colonne IDENTITY recouvre sa pleine fonctionalité sans qu'il soit nécessaire d'effectuer une opération complémantaire (ex: re-initialiser la dernière valeur de l'identité). 

Note: L'option IDENTITY ne peut être activé que pour une seule table à la fois (par session).



References

Aucun commentaire: