Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Exporter la table vers un fichier avec des en-têtes de colonne (noms de colonne) à l'aide de l'utilitaire bcp et de SQL Server 2008

Cette méthode génère automatiquement les noms de colonne avec vos données de ligne à l'aide de BCP.

Le script écrit un fichier pour les en-têtes de colonne (lu depuis INFORMATION_SCHEMA.COLUMNS table) ajoute ensuite un autre fichier avec les données de la table.

La sortie finale est combinée dans TableData.csv qui contient les en-têtes et les données de ligne. Remplacez simplement les variables d'environnement en haut pour spécifier le nom du serveur, de la base de données et de la table.

set BCP_EXPORT_SERVER=put_my_server_name_here
set BCP_EXPORT_DB=put_my_db_name_here
set BCP_EXPORT_TABLE=put_my_table_name_here

BCP "DECLARE @colnames VARCHAR(max);SELECT @colnames = COALESCE(@colnames + ',', '') + column_name from %BCP_EXPORT_DB%.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='%BCP_EXPORT_TABLE%'; select @colnames;" queryout HeadersOnly.csv -c -T -S%BCP_EXPORT_SERVER%

BCP %BCP_EXPORT_DB%.dbo.%BCP_EXPORT_TABLE% out TableDataWithoutHeaders.csv -c -t, -T -S%BCP_EXPORT_SERVER%

set BCP_EXPORT_SERVER=
set BCP_EXPORT_DB=
set BCP_EXPORT_TABLE=

copy /b HeadersOnly.csv+TableDataWithoutHeaders.csv TableData.csv

del HeadersOnly.csv
del TableDataWithoutHeaders.csv

Notez que si vous devez fournir des informations d'identification, remplacez l'option -T par -U my_username -P my_password

Cette méthode a l'avantage d'avoir toujours les noms de colonnes synchronisés avec la table en utilisant INFORMATION_SCHEMA.COLUMNS . L'inconvénient est qu'il crée des fichiers temporaires. Microsoft devrait vraiment corriger l'utilitaire bcp pour prendre en charge cela.

Cette solution utilise l'astuce de concaténation de lignes SQL d'ici combinée avec bcp des idées d'ici