2010-10-08 1 views
9

Sto tentando di esportare dati da SQL Server in formato CSV. Ho un compito da pipistrello per fare ciò che viene eseguito a intervalli regolari. Comando è:Esportazione di dati CSV utilizzando SQLCMD.EXE

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

Il file SQL è solo un SELECT * da una vista.

Questo funziona eccetto che alcune delle righe contengono virgole nei dati, quindi i valori devono essere citati. Potrei cambiare il separatore di colonne in "", "", ma poi avrei bisogno di SQL Server per evitare anche le virgolette singole nei dati.

Sfortunatamente la modifica del separatore a un altro carattere è improbabile che risolva il problema nel 100% dei casi in quanto uno dei campi contiene dati serializzati da un'altra applicazione che contiene tutti i tipi di caratteri strani e meravigliosi.

Esiste un modo per ottenere dati CSV standard e quotati?

risposta

9

Dovresti essere in grado di modificare la tua istruzione SELECT per utilizzare la funzione QUOTENAME. Dovresti, ovviamente, elencare tutte le colonne singolarmente anziché utilizzare SELECT *.

Nota: Può essere difficile da leggere sullo schermo, ma il secondo parametro per QUOTENAME è:

{singola quote} {double quote} {singola quote}

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

Grazie, questo funziona perfettamente. –

+0

Come rendere l'output NULL su ""? – PerlDev

+0

In un file batch, ha funzionato come un incantesimo come questo (con espansione ritardata abilitata e doppia quotata per sfuggire al "char): SELECT QUOTENAME (FieldName, '" "'), .... – djangofan