Usando a opção Salvar resultados como, mostrada abaixo. CSV parece bom!
Mas quando o Excel abre/importa:
- Strings longas são desfiguradas como números (se os dados forem em grande parte numéricos)
- As datas não são detectadas corretamente
- Meus usuários brigam com tudo isso
Como obtenho uma consulta a um arquivo excel limpo (um xls/xlsx real) sem dançar? (Nós gostamos de tudo no próprio arquivo SQL... Eu gostaria que pudéssemos fazer "SELECT INTO FILE:C:\SQLOUTPUT\DATA.XLS ...")
Primeiro, verifique se as opções de consulta estão configuradas da maneira desejada.
Vá para o menu Consulta e escolha Opções de consulta:
A primeira das duas opções destacadas informa ao SSMS para incluir os cabeçalhos de coluna em seu arquivo CSV. O segundo diz ao SSMS para colocar aspas simples em colunas que incluem uma vírgula.
Suspeito que você já tenha feito isso, mas achei que deveria mencioná-lo para completar.
Se isso não for suficiente para obter seus dados em um formato que o Excel interpretará corretamente, minha próxima etapa pode ser (conforme observado nos comentários) usar o Assistente de importação/exportação para gerar um pacote SSIS que faça isso. No entanto, o assistente nem sempre obtém a citação correta - em particular, ele pode colocar coisas entre aspas duplas, mas não "dobra" as aspas duplas incorporadas na string.
Geralmente, nesse ponto, recorro à força bruta.
Eu crio uma consulta modificada que:
"
) por aspas duplas (""
);Então, em vez de
eu gero:
Se eu for usar a consulta regularmente, ela incluirá uma
sortOrder
coluna (definida como 1) e seráUNION ALL
ed com umSELECT
que cria a linha de cabeçalho. Em seguida, envolvo asUNION ALL
consultas ed (tornando-as uma subconsulta), para que eu possa selecionar apenasOne_Big_Column
e classificar porsortOrder
.Você pode ver esta corrida aqui .
Observação: se você estiver formatando o CSV manualmente, provavelmente desejará que ambas as caixas de seleção indicadas acima estejam desativadas.
Eu estava tendo o mesmo problema com o campo e limitar o comprimento da saída não ajudou em nada porque tem a ver com os retornos de carro.
Antes de executar os dados que deseja enviar para o Excel, altere sua consulta nesses campos de texto livre para lidar com esses retornos:
Depois de fazer isso, a saída do Excel foi conforme o esperado. Este é o link que me fez mover corretamente.
A única resposta real que funciona sem dançar é: Use SSIS
Eu queria evitar o SSIS, porque gosto de SQL simples. SQL simples é:
Posso fazer tudo em cinco a vinte minutos e pronto. Também posso replicá-lo para vários SQL Servers facilmente.
Eu adoraria usar SQL# , (há muito tempo queria uma desculpa para usá-lo!), mas ele não possui a funcionalidade nativa de exportação do Excel, e eu tenho que combater alguns incêndios hoje, então não posso aprender isso.
Quando tenho que encadear peças, como SSIS , SQL Agent, etc, são 1 ou mais horas de ajustes e tudo se desfaz quando movemos SQL Servers (o que fazemos a cada 16-24 meses). As peças são ruins.
Mas estou preso com peças para este.
Pena. Espero que o SQL Server possa ser mais forte, em um nível meta.
Não é culpa do SQL Server, nem do SSMS.
O Excel por design abre CSVs da maneira errada possível, é um problema bem conhecido há anos. Você pode até exportar facilmente um arquivo CSV do Excel que não é aberto corretamente pelo mesmo Excel.
A única solução com CSV e Excel é não clicar duas vezes no arquivo ou usar o comando Abrir de dentro do Excel (caso contrário, ele decidirá devastá-los), mas sim abrir uma planilha vazia e usar Importar->Importar do texto. Com isso, você pode dizer como gerenciar cada coluna diferente.
Alterei os dados SQL na exportação para uma fórmula do Excel. A função Excel Trim() mostrará números como números sem notação científica. Não funciona para manter zeros à esquerda.
Como não-numéricos explodem se usados em uma função TRIM(), tive que fazer uma verificação:
Esta é a fórmula que usei para passar o número da PO do cliente, que pode ser uma string ou um número.
No exemplo, se for um número, a fórmula fica assim:
se for uma string:
Portanto, mesmo que pareça confuso no arquivo csv, quando aberto no Excel, parece correto. O usuário pode então copiar a coluna e colá-la de volta como valores se não quiser as fórmulas na planilha.
Use TOAD para SQL Server. A versão gratuita inclui exportação para o Excel, mesmo após o término da avaliação.