为什么 BCP 会创建这么大的文件?

Rac*_*SQL 2 sql-server bcp sql-server-2012

我正在通过 BCP 创建一些报告以通过电子邮件发送。

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
Run Code Online (Sandbox Code Playgroud)

有 9k 行,我有一个 2mb 的文件。我只是复制这个文件的内容,然后粘贴到一个空的 excel 文件中,我有 160KB。

如何使用 bcp 但创建较小的文件?

我有 gproblems 通过 dbmail 发送超过 1mb 的文件。

我将 dbmail 设置为发送 10mb+ 的文件。smtp 也可以。

Han*_*non 5

Excel 在保存文件时在内部使用压缩,这很可能是您看到 Excel 文件小得多的原因。

我建议在通过电子邮件发送之前压缩 .bcp 文件。使用命令行压缩器,例如 7-Zip。

此外,我建议通过 -N 选项使用 BCPs Native (-n) 或 Unicode Native 格式。-c如果导出中有 Unicode (nvarchar/nchar) 数据类型,请小心使用mode。

本机格式维护数据库的本机数据类型。本机格式用于在 SQL Server 表之间高速传输数据。如果使用格式文件,源表和目标表不需要相同。数据传输包括两个步骤:

  • 将源表中的数据批量导出到数据文件中
  • 将数据文件中的数据批量导入目标表。

在相同表之间使用本机格式避免了数据类型与字符格式之间的不必要转换,从而节省了时间和空间。然而,为了实现最佳传输速率,很少对数据格式进行检查。为防止加载的数据出现问题,请参阅以下限制列表。

来自bcp.exe 命令行实用程序的联机丛书:

-n
使用数据的本机(数据库)数据类型执行批量复制操作。此选项不会对每个字段进行提示;它使用本机值。

有关详细信息,请参阅使用本机格式导入或导出数据 (SQL Server)

-N
对非字符数据使用数据的本机(数据库)数据类型,对字符数据使用 Unicode 字符执行批量复制操作。此选项为 -w 选项提供了更高性能的替代方案,旨在使用数据文件将数据从 SQL Server 的一个实例传输到另一个实例。它不会提示每个字段。当您传输包含 ANSI 扩展字符的数据并希望利用本机模式的性能时,请使用此选项。

有关详细信息,请参阅使用 Unicode 本机格式导入或导出数据 (SQL Server)