2010-01-13 8 views
9

Ho questo comando BCP:SQL Server BCP: come inserire le virgolette in tutti i campi?

'bcp DBName..vieter out c:\test003.txt -c -T /t"\",\"" -S SERVER' 

L'uscita CSV ottengo non mette virgolette i nomi dei campi, invece lo mette intorno alle virgole! Come posso ottenere il /t"\",\"" per mettere le virgolette in tutti i campi.

Grazie a tutti

risposta

10

Impostazione della terminazione della riga in aggiunta alla terminazione di campo dovrebbe fare il trucco

'bcp DBName..vieter out c:\test003.txt -c -T -t"\",\"" -r"\"\n\"" -S SERVER' 

Questo probabilmente funzionerà, ma la signorina dei leader "per il primo campo della prima linea , e forse l'ultimo degli ultimi, non sono sicuro, solo supposizioni, nessun server qui!

o prova ad usare QUOTENAME per racchiudere i campi di testo (potresti anche inserire dei numeri, ma di solito non è necessario.

'bcp "SELECT id, age, QUOTENAME(name,'"') FROM DBName..vieter" queryout c:\test003.txt -c -T -t"," -S SERVER' 
+0

c'è sempre un modo per avere la prima e l'ultima sono le citazioni -.. ho davvero bisogno di un file CSV ben formattato – Abs

+0

Quello che detto accaduto -.? ma l'ultima fiedl aveva due citazioni alla fine e il primo non ha avuto citazioni ho solo bisogno di giocherellare con la sopra per ottenere ciò che voglio ci sia qualche docs posso guardare come io non ho incontrato questa roba di regex - se è un'espressione regolare! – Abs

+0

potresti usare 'QUERYOUT' e quindi creare una query usando' QUOTENAME (column, '"')' per i campi di testo. –

0

La risposta praticabile vero e proprio, che rimuove la citazione che porta, è quello di:

A) generare file di formato con BCP:

bcp db.schema.tabel format nul -c -x -f file.xml -t"\",\"" -r"\"\r\n" -T -k 

B) modificare il file copiare manualmente campo 1 al campo 0 sopra, come il primo campo, impostare max_length = 1 e rimuovere il separatore e uno quot l'ha partecipato field1

<FIELD ID="0" xsi:type="CharTerm" TERMINATOR="\&quot;" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 

Il trucco funziona, poiché si aggiunge un campo (interfaccia al file) per rilevare il primo seprator, che risulta sempre un valore null, ma non aggiungere una riga (interfaccia per l'output della query).

0

Ecco l'elenco dei comandi che ho usato.

BCP "DECLARE @colnames VARCHAR(max);SELECT @colnames = COALESCE(@colnames + ',', '') + column_name from databaseName.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tableName'; select @colnames;" queryout "C:\HeadersOnly.csv" -r"\n\"" -c -T -Uusername -Ppassword -SserverName 

bcp databaseName.schema.tableName out "C:\EmployeeDatawithoutheaders.csv" -T -t"\",\"" -r"\"\n\"" -c -Uusername -Ppassword -SserverName 

copy /b C:\HeadersOnly.csv+C:\EmployeeDatawithoutheaders.csv C:\EmployeeData.csv 

del C:\HeadersOnly.csv 

del C:\EmployeeDatawithoutheaders.csv 
1

BCP "SELECT char (34) + * + char (34) FROM atable queryout "C: \ temp \ out.csv" -T -N -c/t" \", \ ""

Ciò ha messo le virgolette prima e dopo ogni campo (compreso il primo e l'ultimo)