2010-01-13 13 views
9

mam tego polecenia BCP:BCP serwera SQL: jak umieszczać cytaty we wszystkich polach?

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

Wyjście CSV mogę nie umieścić w cudzysłowie nazwy pól, zamiast tego stawia go wokół przecinkami! Jak mogę ustawić /t"\",\"", aby umieścić cytaty wokół wszystkich pól.

Dzięki wszystkim

Odpowiedz

10

Ustawianie terminator wiersza oprócz terminator pola powinno wystarczyć

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

To będzie prawdopodobnie działać, ale panna z wiodących "na pierwszym polu pierwszej linii , i być może ostatni z ostatnich, nie jestem pewien, po prostu zgaduję, nie ma tu serwera!

lub spróbuj użyć QUOTENAME do zawijania pól tekstowych (można również zawijać liczby, ale zazwyczaj nie jest to wymagane.

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

Czy kiedykolwiek sposób mieć pierwszy i ostatni mają cytaty -.. i naprawdę trzeba dobrze sformatowany plik CSV – Abs

+0

Co ty Stało się tak - ale ostatni fiedl miał dwa cytaty na końcu, a pierwszy nie miał żadnych cytatów Czy muszę po prostu skrzywdzić powyższe, aby dostać to, czego chcę? Czy jest jakiś dokument, na który mogę spojrzeć, ponieważ nie natknąłem się na to wyrażenie regex - jeśli jest to regex! – Abs

+0

można użyć 'QUERYOUT', a następnie utworzyć zapytanie przy użyciu' QUOTENAME (kolumna, '' ') 'dla pól tekstowych. –

0

Rzeczywista odpowiedź wykonalne, że usuwa wiodącą cytat, jest:

A) wygenerować plik formatu z BCP:

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

B) edytować ten plik aby ręcznie skopiować pole 1 do pola 0 powyżej, jako pierwsze pole, ustaw Maks_dług = 1 i usuń separator, a jeden jest w polu1

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

Sztuczka działa, gdy dodajesz pole (interfejs do pliku), aby wykryć pierwszego sepratora, co skutkuje zawsze wartością zerową, ale nie dodaje wiersza (interfejsu dla wyjścia zapytania).

0

Oto lista poleceń, których użyłem.

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) + * + znak (34) z Atable queryout "C: \ temp \ out.csv" -T -N -C/t" \”\ ""

To będzie umieścić cytaty przed i po każdej dziedzinie (w tym pierwsza i ostatnia)