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 / 276689
Accepted
Racer SQL
Racer SQL
Asked: 2020-10-08 04:03:18 +0800 CST2020-10-08 04:03:18 +0800 CST 2020-10-08 04:03:18 +0800 CST

Por que o BCP cria arquivos tão grandes?

  • 772

Estou criando alguns relatórios via BCP para serem enviados por e-mails.

create TABLE ##tempsss
    (
        create TABLE ##JOB_DataAssociacao_verContrato
(
     F1        VARCHAR(6)  
    ,F2        VARCHAR(200)  
    ,F3        VARCHAR(22)  
    ,F4        char(1)    
    ,F5         varchar(10) 
    ,F6         varchar(15)
    ,F7         varchar(30)  
    ,F8          varchar(10)      
    ,F9          VARCHAR(18)  
)  --it needs to be varchar to be able to use header
    )
    
insert into  ##tempsss
SELECT 
...fields...     
FROM some table or view
go
-------------------------------------------------------------
--passo 2 --

exec xp_cmdshell 'bcp "select ''field1'',''field2'',''field3'' UNION ALL select * from table or view" queryout "filepath\filename.xls" -U sa -P password -w  -S servername'
-------------------------------------------------------------

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'dba profile or something',
    @recipients = 'recipients email',
    @subject = 'email subject',
    @file_attachments='path\filename.xls'
-------------------------------------------------------------

drop table ##tempsss

com 9k linhas, eu tenho um arquivo de 2mb. Acabei de copiar o conteúdo deste arquivo e colar dentro de um arquivo excel vazio e tenho 160 KB.

como posso usar bcp, mas criando arquivos menores?

Estou tendo gproblems para enviar arquivos acima de 1mb via dbmail.

Eu configurei o dbmail para enviar arquivos com 10mb+. smtp está ok também.

sql-server sql-server-2012
  • 2 2 respostas
  • 368 Views

2 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2020-10-08T04:21:59+08:002020-10-08T04:21:59+08:00

    O Excel usa compactação internamente ao salvar um arquivo, esse é o motivo mais provável pelo qual você está vendo um arquivo do Excel muito menor.

    Eu recomendaria compactar o arquivo .bcp antes de enviá-lo por e-mail. Use um compressor de linha de comando, como 7-Zip.

    Além disso, eu recomendaria usar o formato BCPs Native (-n) ou Unicode Native, por meio da opção -N. Tenha cuidado ao usar o -cmodo se você tiver tipos de dados Unicode (nvarchar/nchar) em sua exportação.

    O formato nativo mantém os tipos de dados nativos de um banco de dados. O formato nativo destina-se à transferência de dados de alta velocidade entre tabelas do SQL Server. Se você usar um arquivo de formato, as tabelas de origem e destino não precisam ser idênticas. A transferência de dados envolve duas etapas:

    • Exportação em massa dos dados de uma tabela de origem para um arquivo de dados
    • Importação em massa dos dados do arquivo de dados para a tabela de destino.

    O uso do formato nativo entre tabelas idênticas evita a conversão desnecessária de tipos de dados de e para o formato de caractere, economizando tempo e espaço. Para atingir a taxa de transferência ideal, no entanto, poucas verificações são realizadas em relação à formatação de dados. Para evitar problemas com os dados carregados, consulte a lista de restrições a seguir.

    Do utilitário de linha de comando Manuais Online para bcp.exe :

    -n
    Executa a operação de cópia em massa usando os tipos de dados nativos (banco de dados) dos dados. Esta opção não solicita cada campo; ele usa os valores nativos.

    Para obter mais informações, consulte Usar o formato nativo para importar ou exportar dados (SQL Server) .

    -N
    Executa a operação de cópia em massa usando os tipos de dados nativos (banco de dados) dos dados para dados que não são de caractere e caracteres Unicode para dados de caractere. Essa opção oferece uma alternativa de desempenho superior à opção -w e destina-se à transferência de dados de uma instância do SQL Server para outra usando um arquivo de dados. Ele não solicita para cada campo. Use esta opção quando estiver transferindo dados que contenham caracteres estendidos ANSI e desejar aproveitar o desempenho do modo nativo.

    Para obter mais informações, consulte Usar o formato nativo Unicode para importar ou exportar dados (SQL Server) .

    • 5
  2. Poseidon
    2022-06-20T13:13:16+08:002022-06-20T13:13:16+08:00

    Você pode usar sua tabela temporária global diretamente para exportar dados para um arquivo do Excel usando o procedimento armazenado encontrado aqui: ExportToExcel . A consulta é a seguinte:

    drop table if exists ##mytable; 
    create table ##mytable(col1 varchar(100),col2 varchar(100))  --must be a global temp table
    
    insert into ##mytable(col1,col2)
    values(1,2),(3,4),(5,6)
    
     exec dbo.ExportToExcel 
     @tablename= '##mytable'  --must be a global temp table
     ,@filepath = 'c:\myfolder\'
     ,@filename = 'Excelfile.xlsx'
     ,@AttachToMail = 1,
     ,@MailList = '[email protected]'
    

    após a execução, o proc exibirá o local do arquivo e você poderá acessá-lo facilmente.

    PS: você também pode usar parâmetro @MailSubjecte @MailBodyespecificar corpo e assunto do email, a única limitação desse proc é não habilitar o PSGallery no servidor de destino, ele precisará ser adicionado e pode ser necessário instalar o módulo ImportExcel

    • 0

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