¿Cómo puedo exportar un resultado de consulta a un archivo .csv en SQL Server 2008?
¿Cómo puedo exportar un resultado de consulta a un archivo .csv en SQL Server 2008?
Respuestas:
Aquí hay una versión de pantalla completa de esa imagen, a continuación
Esto mostrará los resultados de su consulta como texto delimitado por comas.
Para guardar los resultados de una consulta en un archivo: Ctrl + Shift + F
Ctrl+Shift+F
, solo cambia el modo de salida, no afecta los resultados si ya ejecutó la consulta. Para que esto se refleje, debe volver a ejecutar la consulta. Cuando lo ejecute en el modo "Resultados a archivo", debería preguntarle dónde desea guardar los resultados.
Sé que esto es un poco viejo, pero aquí hay una manera mucho más fácil ...
Ejecute su consulta con la configuración predeterminada (coloca los resultados en formato de cuadrícula, si el suyo no está en formato de cuadrícula, consulte a continuación)
Haga clic derecho en los resultados de la cuadrícula y haga clic en "Guardar resultados como" y guárdelo.
Si sus resultados no están en formato de cuadrícula, haga clic con el botón derecho donde escribe la consulta, desplace "Resultados a" y haga clic en "Resultados a la cuadrícula"
¡Tenga en cuenta que NO captura los encabezados de columna!
¡Buena suerte!
Puedes usar PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
y Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(pero no necesitaba ajustar esos Cmdlets). Además, me había salvado los comandos en un script, que no se presentaría hasta que había cambiado la política de ejecución: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
política de ejecución será suficiente.
Si la base de datos en cuestión es local, la siguiente es probablemente la forma más sólida de exportar el resultado de una consulta a un archivo CSV (es decir, darle el mayor control).
Después de pasar por este proceso exhaustivamente, encontré que la siguiente es la mejor opción
Script de PowerShell
$dbname = "**YOUR_DB_NAME_WITHOUT_STARS**"
$AttachmentPath = "c:\\export.csv"
$QueryFmt= @"
**YOUR_QUERY_WITHOUT_STARS**
"@
Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation
Ejecute PowerShell como administrador
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Basándome en la respuesta de NS, tengo un script de PowerShell que exporta a un archivo CSV con las comillas alrededor del campo y separadas por comas y omite la información del encabezado en el archivo.
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
$qry = @"
Select
*
From
tablename
"@
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv"
Las primeras dos líneas permiten la capacidad de usar el comando-let Invoke-SqlCmd .
Use T-SQL :
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
Pero, hay un par de advertencias:
Debe tener disponible el proveedor Microsoft.ACE.OLEDB.12.0. El proveedor de Jet 4.0 también funcionará, pero es antiguo, así que utilicé este en su lugar.
El archivo .CSV ya debe existir. Si está utilizando encabezados ( HDR=YES
), asegúrese de que la primera línea del archivo .CSV sea una lista delimitada de todos los campos.
Usar la técnica nativa de SQL Server Management Studio para exportar a CSV (como sugirió @ 8kb) no funciona si sus valores contienen comas, porque SSMS no ajusta los valores entre comillas dobles. Una forma más sólida que funcionó para mí es simplemente copiar los resultados (hacer clic dentro de la cuadrícula y luego CTRL-A, CTRL-C) y pegarlo en Excel. Luego guarde como archivo CSV desde Excel.
Puede usar QueryToDoc ( http://www.querytodoc.com ). Le permite escribir una consulta en una base de datos SQL y exportar los resultados, después de elegir el delimitador, a Excel, Word, HTML o CSV
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
como @Slogmeister Extraordinaire Quoted es correcto.
Uno necesita tener 1> Archivo ya presente con columnas 2> Uno necesita tener Office instalado
Errores enfrentados
Mensaje 7303, Nivel 16, Estado 1, Línea 1 No se puede inicializar el objeto de origen de datos del proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(nulo)". "
Http://download.microsoft.com/download/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exe de 32 bits
Msg 15281, Nivel 16, Estado 1, Línea 1 SQL Server bloqueó el acceso a la DECLARACIÓN 'OpenRowset / OpenDatasource' del componente 'Consultas distribuidas ad hoc' porque este componente está desactivado como parte de la configuración de seguridad para este servidor. Un administrador del sistema puede habilitar el uso de 'Consultas distribuidas ad hoc' utilizando sp_configure. Para obtener más información sobre cómo habilitar 'Consultas distribuidas ad hoc', busque 'Consultas distribuidas ad hoc' en los Libros en pantalla de SQL Server.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Si no desea utilizar Powershell, esta respuesta es una variación de la gran respuesta de 8 kb. La única diferencia es que, en lugar de seleccionar CSV como formato de salida, seleccione Delimitado por tabuladores. De esta manera, si hay comas en sus datos, no omitirá celdas en Excel. Además, si tiene el delimitador predeterminado de Excel establecido en pestañas, simplemente puede hacer una copia de todos los resultados de la consulta SSMS (CTRL-A, CTRL-C) y pegar en Excel (no es necesario guardarlo como un archivo e importarlo a Excel ):
Ahora puede ejecutar su consulta, luego hacer una CTRL-A para seleccionar todos los resultados, luego CTRL-C para copiar al portapapeles, luego cambiar a Excel 2013 (puede funcionar también en 2007, no estoy seguro) y pegar, suponiendo que Excel esté predeterminado delimitador se establece en tab.
Sí, todo esto es posible cuando tiene acceso directo a los servidores. Pero, ¿qué sucede si solo tiene acceso al servidor desde un servidor web / de aplicaciones? Bueno, la situación fue esto con nosotros hace mucho tiempo y la solución fue Exportar SQL Server a CSV .