txt studio sqlserver management codepage sql-server csv ssms

sql-server - studio - sql server bulk copy



¿Cómo obtener resultados de exportación en formato CSV "real" en SQL Server Managment Studio? (10)

Tengo una consulta que estoy ejecutando en SQL Server Management Studio (que se conecta a una base de datos de SQL Server 2005). Quiero exportar los datos en formato CSV. No quiero el formato CSV, donde solo colocas una coma entre cada columna, pero el formato CSV "real", donde pones comillas alrededor de tus cadenas. De esta forma, puede exportar datos que tengan comas o comillas.

Todos los ejemplos que veo se limitan al formato wannabe. No puedo entender dónde está la opción para citar cadenas.

Si SSMS es realmente incapaz de esta hazaña básica, ¿hay otras herramientas que lo hagan fácilmente? No quiero tener que escribir un programa C # cada vez que necesito un volcado de datos.

¡Gracias!


¿Cómo se siente al exportar a CSV desde SSMS a través de PowerShell ? Esta publicación describe cómo definir una herramienta externa en SSMS que envía la consulta seleccionada actualmente a un script de PowerShell que exporta a un archivo CSV.


Como todas las configuraciones mencionadas anteriormente no corrigieron el CSV que mi SSMS (SQL Server 2014) generó y exportó un archivo separado por tabuladores no lo mejoró, un colega y yo hicimos un script convertidor (Ruby) para convertir el SSMS CSV en CSV legible Mantiene la codificación, los separadores y los saltos de línea del archivo original e incluso realiza una validación exacta de coincidencia de bytes al final (crea un archivo en el formato SSMS del archivo de entrada analizado (!) Y compara ambos archivos).

https://gist.github.com/gr8bit/62202ea89a7e3aff67df2ff080ee8e88

Contáctame en github si encuentras errores, por favor. ¡Aclamaciones!


Creo que lo más fácil es abrir Excel e importar los datos de la conexión SQL en lugar de usar la exportación SSMS .... Estoy usando SSMS 2016 y no tiene la opción "Citar cadenas que contienen separadores de lista al guardar resultados .csv" presumiblemente porque no funciona

Ron


En SSMS 2012 hay una opción para esto, en Herramientas -> Opciones -> Resultados de consulta -> Servidor SQL -> Resultados a la cuadrícula, se llama "Comillas de comillas que contienen separadores de lista al guardar resultados .csv". No sé por cuánto tiempo ha existido esa opción, pero estoy desconcertado por dos cosas:

  1. ¿Cómo es que no está activado por defecto?
  2. ¿Cómo es posible que sea una opción y no una parte intrínseca del código de exportación CSV?

Simplemente desafía la creencia de que el comportamiento predeterminado es tener una exportación de CSV imposible de importar correctamente. Me di cuenta de que Excel hace lo mismo, tendré que ir a ver si eso también tiene una opción.

Mientras tanto, gracias a mi colega que me señaló esta extraña funcionalidad cuando estaba despotricando sobre cómo el exportador de CSV era completamente inútil, y este era el mejor vínculo que había encontrado al respecto, así que pensé que pondría el conocimiento aquí para el beneficio de futuros buscadores.

ACTUALIZAR

Una captura de pantalla a continuación:


Es triste que la opción disponible sea confusa, pero no operativa. Lo siguiente está funcionando al menos.

  1. Elija "Tareas> Exportar datos" en el menú contextual de la base de datos (tampoco funciona en el nivel de la tabla)
  2. Para Source, elija "Microsoft OLE DB Provider para SQL Server"
  3. Para destino, elija "Archivo plano ..." y especifique "Formato" como delimitadores y text qualifier como comillas dobles.
  4. Seleccione Tabla o consulta (trabajé con la consulta)
  5. Termina el asistente

¡Usted debe ser bueno para ir!


Las diferentes combinaciones de estas configuraciones pueden generar resultados en la salida que son datos incorrectos o parciales. Esto se debe a que Microsoft no pensó que fuera lo suficientemente importante para solucionar estos problemas. Solo estoy explicando qué sucede con los archivos CSV al enviar los resultados a un archivo.

Para obtener buenos resultados, haga lo siguiente:

Abra una nueva ventana de consulta (nueva pestaña / sesión) ... si no lo hace, la configuración siguiente se pierde y se restablece a los valores predeterminados

Escriba la consulta para manejar la cita dentro de la cita, y también ajuste todos los tipos de datos de cadena entre comillas. También tenga en cuenta que diferentes DBMS y gramáticas de lenguaje de programación aceptan una sintaxis diferente para una comilla doble escapada (si usa esta salida como entrada a otro sistema). Algunos usan /" . Algunos usan "" . XML usa &quot ;. Probablemente una razón por la que Microsoft eligió ignorar esta funcionalidad, por lo que no tuvieron que lidiar con los argumentos.

.. Si la Secuencia de escape del nuevo sistema es "" .

SELECT ''"'' + REPLACE(CAST(column1 AS VARCHAR(MAX)), ''"'', ''""'') + ''"'' FROM table1

.. Si la Secuencia de escape del nuevo sistema es /" .

SELECT ''"'' + REPLACE(CAST(column1 AS VARCHAR(MAX)), ''"'', ''/"'') + ''"'' FROM table1

Configuración:

Opciones de consulta> Resultados> "Incluir cabeceras de columna al copiar o guardar los resultados" marcada

Opciones de consulta> Resultados> "Citar cadenas que contienen separadores de lista al guardar resultados .csv" - ROTO; ¡NO UTILICE!

Opciones de consulta> Resultados> otros sin marcar

Opciones de consulta> Resultados> Texto> delimitado por comas (ajuste en la esquina superior derecha)

Opciones de consulta> Resultados> Texto> "Incluir encabezados de columna en el conjunto de resultados" seleccionado

Opciones de consulta> Resultados> Texto> otros no seleccionados

Opciones de consulta> Resultados> Texto> "Número máximo de caracteres que se muestran en cada columna": se establece en longitud máxima para que las cadenas no se trunquen.

Query> Results To File (Esto es un alternar entre las 3 opciones)

Ejecutar consulta (F5)

Solicitud de nombre de archivo del informe

Abra el archivo para ver los resultados

NOTA: si necesita hacer esto regularmente, es mejor que simplemente desarrolle un programa que lo haga por usted en .NET o Java, o en el idioma con el que se sienta cómodo. De lo contrario, tienes una alta probabilidad de cometer un error. Luego sea extremadamente consciente de la sintaxis del sistema al que está importando, antes de definir su exportación desde SQL Server.


Mi trabajo normal es construirlo en la consulta:

SELECT ''"'' + REPLACE(CAST(column AS NVARCHAR(4000)), ''"'', ''""'') + ''"'' AS Header, ... FROM ...

Puede compilarlo en una función definida por el usuario, para hacerlo un poco más fácil, pero debe crear una función separada para cada tipo de datos.


No sé de ninguna manera para hacer esto solo con SSMS. Sé que TOAD (http://www.toadworld.com/) tiene una opción de CSV. No estoy seguro si es un formato escapado. Si SSIS es una opción, puede convertir a un formato que escapa de cadenas (CSV verdadero), pero eso no está en SSMS.

Si tiene que escribir un programa C #, consideraría consultar la tabla y luego ejecutar la consulta, ya que los metadatos indicarán cuál necesita el escape.


Tal vez esto no funcione para su aplicación, pero generalmente soluciono este problema exportando a un formato delimitado por tabuladores. No pase por alto esta simple solución si se aplica a usted.


Usualmente uso este tipo de función:

CREATE FUNCTION [dbo].[toExport] ( @txt varchar(max) ) RETURNS varchar(max) AS BEGIN return REPLACE(REPLACE(REPLACE(@txt, '';'', '',''), CHAR(10), '' ''), CHAR(13), '' ''); END

Y en seleccionar lo puse aquí:

SELECT dbo.toExport( column_name ) AS column_name FROM ....

Y en SMSS 2012 simplemente haga clic con el botón derecho en una cuadrícula y guarde los resultados como, o copie toda la cuadrícula (ctrl-A) y ctrl-V en Excel.

Es la manera más fácil de administrar datos en, por ejemplo, MS Excel sin problemas con las columnas.

Por supuesto, debe hacer clic en "Citar cadenas que contienen separadores de lista al guardar resultados .csv" en Herramientas -> Opciones -> Resultados de la consulta -> Servidor Sql -> Resultados en la cuadrícula e incrementar Caracteres máximos recuperados si lo necesita.