2014-04-22 15 views
5

Ho bisogno di BCP una tabella in un file delimitato da tabulazioni, ma ho bisogno dei nomi delle colonne nel primo record della tabella. Domanda 1: ho ragione che BCP non ha un interruttore per questo? Domanda 2: In caso negativo, perché?Ottenere i nomi delle colonne con BCP queryout

ho cercato di fare quanto segue:

BCP "declare @colnames varchar(max); select @colnames=coalesce (@colnames+char(9), '') 
+ Column_Name from db.information_Schema.columns where table_name='table1' order by 
ordinal_position; select @colnames" queryout Table1_Columns.tsv -S?? -U?? -P?? -f** -e** 

Il file di formato simile al seguente:

9.0 
1 
1 SQLCHAR 0 100 "\r\n" 1 Column_Names SQL_Latin1_General_CP1_CI_AS 

Questo mi fa un file dei nomi di colonna, poi un secondo comando BCP me una ottiene file di dati, e io solo DOS-copiare i due insieme. Domanda 3: Sono intelligente o cosa? Domanda 4: Perché non funziona? Ottengo l'errore:

SQLState = S1000, NativeError = 0 
Error = [Microsoft][SQL Native Client]Host-file columns may be skipped only when 
copying into the Server 

risposta

8

BCP non supporta l'esportazione le intestazioni delle colonne con i dati, tuttavia ci sono alcune soluzioni come esportare le intestazioni in un file separato, quindi la fusione sia le intestazioni e file di dati come il seguente:

exec master..xp_cmdshell 'BCP "select 'SETTINGS_ID','GROUP_NAME'" queryout d:\header.csv -c -T -t,' 

exec master..xp_cmdshell 'BCP "select SETTINGS_ID,GROUP_NAME from [DB]..[TABLE]" queryout "d:\columns.csv" -c -t, -T ' 

exec master..xp_cmdshell 'copy /b "d:\header.csv"+"d:\columns.csv" "d:/result.csv"' 

è anche possibile eliminare i file inutilizzati:

exec master..xp_cmdshell 'del "d:\header.csv"' 
exec master..xp_cmdshell 'del "d:\columns.csv"' 

O forse è possibile combinare tutti i dati in una visualizzazione (l'aggiunta di header) ed esportarlo

+0

la prima riga non funziona per me: ''SETTINGS_ID' non è un'opzione riconosciuta'. Qualche indizio? –

+0

Devi sostituirlo con le tue intestazioni di colonna. –

+0

come si può usare il comando copia con posizione come parametro? ex: 'EXEC master..xp_cmdshell 'copy/b"' + @OutputLocationHeader + '"+"' + @OutputLocationData + '""' + @OutputLocation + '"'' mi sta dando un errore per il primo '+ 'segno – Stephanie