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