Como posso exportar um resultado da consulta para um arquivo .csv no SQL Server 2008?
Como posso exportar um resultado da consulta para um arquivo .csv no SQL Server 2008?
Respostas:
Aqui está uma versão em tela cheia dessa imagem, abaixo
Isso exibirá os resultados da sua consulta como texto delimitado por vírgula.
Para salvar os resultados de uma consulta em um arquivo: Ctrl + Shift + F
Ctrl+Shift+F
, apenas altera o modo de saída, não afeta os resultados se você já executou a consulta. Para que isso seja refletido, você deve executar novamente a consulta. Ao executá-lo no modo "Resultados em arquivo", ele deve ser solicitado onde você deseja salvar os resultados.
Eu sei que isso é um pouco antigo, mas aqui está uma maneira muito mais fácil ...
Execute sua consulta com as configurações padrão (coloca os resultados no formato de grade, se o seu não estiver no formato de grade, veja abaixo)
Clique com o botão direito do mouse nos resultados da grade e clique em "Salvar resultados como" e salve-o.
Se seus resultados não estiverem no formato de grade, clique com o botão direito do mouse em onde você escreve a consulta, passe o mouse em "Resultados para" e clique em "Resultados na grade"
Lembre-se de que você NÃO captura os cabeçalhos das colunas!
Boa sorte!
Você pode usar o PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
e Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(mas não precisava encaixar esses cmdlets). Além disso, eu tinha guardado os comandos em um script, o que não seria executado até que eu tivesse mudado a política de execução: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
política de execução será suficiente.
Se o banco de dados em questão for local, provavelmente é a maneira mais robusta de exportar um resultado de consulta para um arquivo CSV (ou seja, oferecendo mais controle).
Depois de passar por esse processo exaustivamente, achei a seguinte a melhor opção
Script do 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
Execute o PowerShell como administrador
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Com base na resposta do NS, tenho um script do PowerShell que exporta para um arquivo CSV com aspas ao redor do campo e separados por vírgula e ignora as informações do cabeçalho no arquivo.
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"
As duas primeiras linhas permitem a capacidade de usar o comando Invoke-SqlCmd -let.
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
Mas há algumas ressalvas:
Você precisa ter o provedor Microsoft.ACE.OLEDB.12.0 disponível. O provedor Jet 4.0 também funcionará, mas é antigo, então usei este.
O arquivo .CSV já deverá existir. Se você estiver usando cabeçalhos ( HDR=YES
), verifique se a primeira linha do arquivo .CSV é uma lista delimitada de todos os campos.
O uso da técnica nativa do SQL Server Management Studio para exportar para CSV (como sugerido em 8kb) não funcionará se seus valores contiverem vírgulas, porque o SSMS não quebra valores entre aspas duplas. Uma maneira mais robusta que funcionou para mim é simplesmente copiar os resultados (clique dentro da grade e, em seguida, CTRL-A, CTRL-C) e colá-lo no Excel. Em seguida, salve como arquivo CSV no Excel.
Você pode usar o QueryToDoc ( http://www.querytodoc.com ). Permite escrever uma consulta em um banco de dados SQL e exportar os resultados - depois de escolher o delimitador - para Excel, Word, HTML ou 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 está correto.
É necessário ter 1> Arquivo já presente nas colunas 2> É necessário ter o Office instalado
Erros enfrentados
Mensagem 7303, nível 16, estado 1, linha 1 Não é possível inicializar o objeto de fonte de dados do provedor OLE DB "Microsoft.ACE.OLEDB.12.0" para o servidor vinculado "(nulo)". "
A mensagem 15281, nível 16, estado 1, linha 1 do SQL Server bloqueou o acesso à DECLARAÇÃO 'OpenRowset / OpenDatasource' do componente 'Consultas Distribuídas Ad Hoc' porque esse componente está desativado como parte da configuração de segurança deste servidor. Um administrador do sistema pode ativar o uso de 'Consultas distribuídas ad hoc' usando sp_configure. Para obter mais informações sobre como ativar 'Consultas distribuídas ad hoc', procure 'Consultas distribuídas ad hoc' nos Manuais Online do SQL Server.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Se você não quiser usar o Powershell, esta resposta é uma variação da ótima resposta de 8kb. A única diferença é que, em vez de selecionar CSV como formato de saída, selecione Delimitado por tabulação. Dessa forma, se houver vírgulas nos seus dados, ele não pulará as células no Excel. Além disso, se você tiver o delimitador padrão do Excel definido como guias, poderá simplesmente copiar todos os resultados da consulta SSMS (CTRL-A, CTRL-C) e colar no Excel (não é necessário salvar como arquivo e importar para o Excel ):
Agora você pode executar sua consulta, depois fazer um CTRL-A para selecionar todos os resultados, depois CTRL-C para copiar para a área de transferência, depois mudar para o Excel 2013 (pode também funcionar em 2007 também) e colar - assumindo o padrão do Excel delimitador está definido para tab.
Sim, tudo isso é possível quando você tem acesso direto aos servidores. Mas e se você tiver apenas acesso ao servidor a partir de um servidor de aplicativos / web? Bem, a situação era essa conosco há muito tempo e a solução foi o SQL Server Export to CSV .