AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 190898
Accepted
Jonesome Reinstate Monica
Jonesome Reinstate Monica
Asked: 2017-11-15 08:54:37 +0800 CST2017-11-15 08:54:37 +0800 CST 2017-11-15 08:54:37 +0800 CST

SQL Server: SSMS "Salvar resultados como" cria CSV que o Excel desmancha

  • 772

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 ...")

insira a descrição da imagem aqui

sql-server ssms
  • 6 6 respostas
  • 15762 Views

6 respostas

  • Voted
  1. RDFozz
    2017-11-15T10:09:51+08:002017-11-15T10:09:51+08:00

    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:

    Caixa de diálogo 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:

    • Substitui aspas duplas nos dados ( ") por aspas duplas ( "");
    • Converte valores numéricos/de data em strings e
    • Coloca todos os dados entre aspas duplas e (finalmente)
    • Gera todas as colunas concatenadas juntas, separadas por vírgulas.

    Então, em vez de

     ID | First Name | Last Name |      Address      
    ----+------------+-----------+-------------------
      1 |  John "JT" |   Smith   |  123 Wayne's Way  
    

    eu gero:

    One_Big_Column
    ------------------------------------------------
    "1","John ""JT""","Smith","123 Wayne's Way"
    

    Se eu for usar a consulta regularmente, ela incluirá uma sortOrdercoluna (definida como 1) e será UNION ALLed com um SELECTque cria a linha de cabeçalho. Em seguida, envolvo as UNION ALLconsultas ed (tornando-as uma subconsulta), para que eu possa selecionar apenas One_Big_Columne classificar por sortOrder.

    SELECT One_Big_Column
      FROM (
            SELECT '"Id","First Name","Last Name","Address"' as One_Big_Column
                  ,0 as sortOrder
            UNION ALL
            SELECT '"' + CAST(Id as varchar(30)) + '","'
                        + REPLACE(firstname, '"','""') + '","'
                        + REPLACE(lastname, '"','""') + '","'
                        + REPLACE(address, '"','""') + '"'
                  ,1 AS sortOrder
              FROM myTable
           ) sq
     ORDER BY sortOrder
    ;
    

    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.

    • 5
  2. Briana Finney
    2019-06-06T13:47:35+08:002019-06-06T13:47:35+08:00

    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:

    SELECT REPLACE(REPLACE(Description, CHAR(10), ''), CHAR(13), ''), ...
    

    Depois de fazer isso, a saída do Excel foi conforme o esperado. Este é o link que me fez mover corretamente.

    • 3
  3. Best Answer
    Jonesome Reinstate Monica
    2017-11-15T09:54:40+08:002017-11-15T09:54:40+08:00

    A única resposta real que funciona sem dançar é: Use SSIS

    Eu queria evitar o SSIS, porque gosto de SQL simples. SQL simples é:

    • fácil de testar
    • controle de versão fácil
    • fácil de lançar em um trabalho do SQL Agent
    • fácil obter resultados sql em um e-mail

    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.

    • 1
  4. motoDrizzt
    2018-08-17T05:06:51+08:002018-08-17T05:06:51+08:00

    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.

    • 0
  5. dan cantley
    2022-07-08T04:14:54+08:002022-07-08T04:14:54+08:00

    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:

    '=if(isnumber('+POH.[BEG_03]+'),TRIM('+POH.[BEG_03]+'),"'+POH.[BEG_03]+'")' AS 'TP_PO',
    

    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:

    =IF(ISNUMBER(100000657618),TRIM(100000657618),"100000657618")
    which will look like this in the Spreadsheet: 100000657618
    

    se for uma string:

    =if(isnumber(C22686608),TRIM(C22686608),"C22686608"), it will look like this: C22686608
    

    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.

    • 0
  6. user890332
    2020-01-03T07:31:33+08:002020-01-03T07:31:33+08:00

    Use TOAD para SQL Server. A versão gratuita inclui exportação para o Excel, mesmo após o término da avaliação.

    • -2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve