Questo metodo genera automaticamente i nomi delle colonne con i dati delle righe utilizzando BCP.
Lo script scrive un file per le intestazioni di colonna (letto da INFORMATION_SCHEMA.COLUMNS
tabella) quindi aggiunge un altro file con i dati della tabella.
L'output finale viene combinato in TableData.csv
che ha le intestazioni e i dati di riga. Basta sostituire le variabili di ambiente in alto per specificare il nome del server, del database e della tabella.
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
Nota che se devi fornire le credenziali, sostituisci l'opzione -T con -U my_username -P my_password
Questo metodo ha il vantaggio di avere sempre i nomi delle colonne sincronizzati con la tabella utilizzando INFORMATION_SCHEMA.COLUMNS
. Lo svantaggio è che crea file temporanei. Microsoft dovrebbe davvero correggere l'utilità bcp per supportare questo.
Questa soluzione utilizza il trucco di concatenazione delle righe SQL da qui combinato con le idee bcp da qui