2010-10-08 39 views
9

Estoy intentando exportar datos de SQL Server a formato CSV. Tengo una tarea de bat para hacer esto que se ejecuta a intervalos regulares. El comando es:Exportación de datos CSV utilizando SQLCMD.EXE

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

El archivo SQL es simplemente SELECCIONAR * desde una vista.

Esto funciona, excepto que algunas de las filas tienen comas en los datos, por lo que los valores deben ser cotizados. Podría cambiar el separador de columna para que sea "','", pero también necesitaría SQL Server para escapar de comillas simples en los datos.

Desafortunadamente, cambiar el separador a otro personaje no resolverá el problema en el 100% de los casos, ya que uno de los campos contiene datos serializados de otra aplicación que contiene todo tipo de personajes raros y maravillosos.

¿Hay alguna forma de que obtenga datos CSV estándar cotizados?

Respuesta

9

Debería poder modificar su instrucción SELECT para usar la función QUOTENAME. Por supuesto, debe enumerar todas las columnas individualmente en lugar de usar SELECT *.

Nota: Puede ser difícil de leer en la pantalla, pero el segundo parámetro para QUOTENAME es:

{comilla simple} {comillas dobles} {comilla simple}

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

, gracias, esto funciona perfectamente. –

+0

¿Cómo hacer que la salida NULL sea ""? – PerlDev

+0

En un archivo de proceso por lotes, funcionaba como un amuleto como este (con expansión retrasada habilitada y doble cita para escapar de "char"): SELECCIONAR NOMBRE DE CUOTA (Nombre de campo, '""'), .... – djangofan

Cuestiones relacionadas