2010-10-08 12 views
9

Próbuję wyeksportować dane z SQL Server do formatu CSV. Mam do wykonania zadanie, które jest uruchamiane w regularnych odstępach czasu. Polecenie to:Eksportowanie danych CSV przy użyciu SQLCMD.EXE

SQLCMD.EXE -d [db details] -i c:\export.sql -o c:\export.csv -s"," -W 

Plik SQL to po prostu WYBIERZ * z widoku.

Działa to z tym wyjątkiem, że niektóre wiersze zawierają przecinki w danych, więc wartości należy podać. Mógłbym zmienić separator kolumn na "", "", ale wtedy potrzebowałbym SQL Server, aby uniknąć pojedynczych cudzysłowów również w danych.

Niestety, zmiana separatora na inny jest mało prawdopodobne, aby rozwiązać problem w 100% przypadków, ponieważ jedno z pól zawiera szeregowane dane z innej aplikacji, która zawiera wszystkie dziwne i wspaniałe znaki.

Czy jest jakiś sposób, aby uzyskać standardowe, cytowane dane CSV?

Odpowiedz

9

Powinieneś być w stanie zmodyfikować swoją instrukcję SELECT, aby użyć funkcji QUOTENAME. Oczywiście musiałbyś osobno wymienić wszystkie kolumny, zamiast używać SELECT *.

Uwaga: To może być trudne do odczytania na ekranie, ale drugi parametr QUOTENAME jest:

{apostrof} {cudzysłów} {apostrof}

SELECT QUOTENAME(Column1, '"'), QUOTENAME(Column2, '"') 
    FROM YourView 
+0

Thanks to działa doskonale. –

+0

Jak ustawić NULL na ""? – PerlDev

+0

W pliku wsadowym zadziałał podobny do tego urok (z włączoną opcją opóźnionego włączenia i podwójnym cudzysłowem, aby uciec przed znakiem "char"): WYBIERZ NUMER ZAKUPU (nazwa pola, "" "), ... – djangofan

Powiązane problemy