Precisamos gravar os resultados da consulta SELECT em um arquivo csv. Como isso pode ser feito usando o T-SQL no SQL Server 2008 r2? Eu sei que isso pode ser feito no SSIS, mas por alguns motivos, não temos essa opção.
Tentei usar o proc sugerido no artigo abaixo, mas quando executo o proc, o SQL reclama que não consegue executar sys.sp_OACreate e sys.sp_OADestroy que são chamados neste proc.
Você sabe como podemos ativar esses componentes ou conhece alguma maneira melhor de gravar em um arquivo usando T-SQL?
Desde já, obrigado.
Usar utilitário BCP
O
-c
argumento especifica a saída do caractere c , em oposição ao formato binário nativo do SQL; esse padrão é para valores separados por tabulação, mas-t ,
altera o t erminador de campo para vírgulas. especifica a-T
autenticação do Windows (" conexão enferrujada"), caso contrário, use .-U MyUserName -P MyPassword
Isso não exporta cabeçalhos de coluna por padrão. Você precisa usar um UNION ALL para cabeçalhos
OU
Usar SQLCMD
OU
Usar Powershell
Aqui está um link para um artigo . Se você acabar usando isso, convém anexar
-notype
depoisExport-Csv $extractFile
para se livrar da coluna desnecessária no arquivo de saída.Adicionando à resposta anterior, que ajuda você a automatizar a ação, se você precisar apenas de vez em quando pode fazê-lo no Management Studio, basta clicar com o botão direito do mouse no cabeçalho - Salvar resultados como -> escolher um arquivo .csv .
Ou se você quiser fazer isso para cada instrução select executada, poderá alterar a direção de saída dos resultados para um arquivo. Use Ferramentas -> Opções -> Resultados da consulta - Resultados para arquivo .
Outra maneira, que pode ser automatizada facilmente, e faz uso do SSIS, é usando o recurso Exportar Dados do Management Studio. Clique com o botão direito do mouse no banco de dados -> Tarefas -> Exportar dados. Há um assistente com muitas opções lá. Você deve escolher o banco de dados de origem, o destino e outras opções. Para o destino certifique-se que é "Flat file", navegue e escolha o tipo .csv, escolha a formatação que você precisa e no final você obterá um pacote SSIS que pode ser salvo localmente e repetido quando necessário.
Usar T-SQL
Mas, há algumas ressalvas:
Parece que você já tem uma solução aceitável, mas se você tiver o db mail configurado, poderá fazer algo assim:
Se você estiver enviando o arquivo por e-mail para algum lugar de qualquer maneira, poderá economizar algumas etapas.
Baixa tecnologia, mas...
Isso pode ser feito facilmente em um processo de 3 etapas:
Escreva sua consulta como uma
SELECT INTO
consulta. Isso basicamente exportará os resultados da consulta para uma tabela.Observe que essa tabela não pode existir quando a consulta é executada, pois esse tipo de consulta deseja criar a tabela como parte da execução.
Em seguida, use o SSIS para exportar os resultados dessa tabela para o
.csv
. O assistente de exportação do SSIS permite que você escolha seu delimitador, etc. Isso é realmente útil para usar um | delimitador em instâncias em que o conjunto de resultados contém vírgulas.Clique com o botão direito em
DB Name > Tasks > Export Data
Quando a exportação estiver concluída, execute o
DROP TABLE
comando para limpar sua tabela de log.Eu uso o MS Access DoCMD para exportar CSVs do SQL Server. É capaz de fazê-lo com um único comando. O banco de dados de acesso é usado apenas para habilitar o comando de acesso. Ele tem um bom desempenho e, como um benefício adicional (não sei por que), cria um schema.ini para a tabela exportada.
Adão
Este procedimento gerará um arquivo CSV com a saída da consulta que você passar como parâmetro. O segundo parâmetro é o nome do seu arquivo CSV, certifique-se de passar o nome do arquivo com um caminho gravável válido.
Aqui está o script para criar o procedimento: