首页 > 解决方案 > SQL csv 在第 256 个字符处导出截止值

问题描述

我已经存储了通过电子邮件从 SQL 表作为 csv 文件发送数据的过程。除了 csv 将列的数据减少到 256 个字符之外,其他一切都在工作,即使我有一个“@query_result_width = 32767”。由于某种原因,这不起作用。我试过'@query_no_truncate = 1',但排除了标题,我还需要发送标题。有小费吗?

 declare @qry nvarchar(max);
    
 Select @qry= 'USE Erve Update FORM Set Instructions = REPLACE(REPLACE(Instructions, CHAR(10), ""),CHAR(9), CHAR(32)) from FORM; select * from FORM'

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'NoReply',  
    @recipients ='some@receiver.com', 
    @query = @qry,
    @body = 'Liitteenä kaikki erillisveloitettavat rivit.',
    @subject = 'Erillisveloitettavat rivit',  
    @attach_query_result_as_file = 1 , 
    @query_attachment_filename = 'ErveKaikki-rivit.csv',
    @query_result_separator = ' ',
    @query_result_width = 32767,
    @query_result_no_padding = 1,
    @query_result_header = 1


END

标签: sql-serversp-send-dbmail

解决方案


派对有点晚了,我希望你现在已经解决了你的问题哈哈

但是对于任何偶然发现这个问题的人来说,对我有用的是将我的列的声明(我在 SELECT 查询中用于创建我的 csv 输出的那些)从 nvarchar/varchar(max) 更改为 nvarchar/varchar( n ),n为固定值。

因此,在 OP 的情况下,我假设正在剪切的列在表中声明为 nvarchar/varchar(max FORM)

Select @qry= 'USE Erve Update FORM Set Instructions = REPLACE(REPLACE(Instructions, CHAR(10), ""),CHAR(9), CHAR(32)) from FORM; select * from FORM'

我使用与 OP 相同的代码来发送电子邮件

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = @profile,
    @recipients = @email_to_address,
    @subject = @email_subject,
    @query = @Query,
    @attach_query_result_as_file = 1,
    @query_attachment_filename = 'filename.csv',
    @query_result_separator = @tab,
    @query_result_no_padding = 1,
    @query_result_width = 32767

这再次对我有用,因为我能够更改列定义,并且我确信这些列的数据不会超过 8000 个字符。


推荐阅读