我在 SQL2005 中使用 sp_send_dbmail 发送一封电子邮件,并将结果放在附件中。发送附件时,它是 UCS-2 编码的,我希望它是 ANSI 或 UTF-8。

这是 SQL

EXEC msdb.dbo.sp_send_dbmail
    @recipients = 'temp@example.com'
    , @query = 'DECLARE @string_to_trim varchar(60);SET @string_to_trim = ''1234''; select rtrim(@string_to_trim), ''tom'''
    , @query_result_header=0
    , @subject = 'see attach'
    , @body= 'temp body'
    , @profile_name= N'wksql01tAdmin'
    , @body_format = 'HTML'
    ,@query_result_separator = ','
    ,@query_attachment_filename = 'results.csv'
    ,@query_no_truncate = '0'
    ,@attach_query_result_as_file = 1

我在互联网上看到一些评论说这个问题已在 sql2005 SP2 中修复,但发现情况并非如此。

有帮助吗?

解决方案

我认为解决您所看到的问题的唯一方法是使用 BCP 将数据转储到平面文件,然后附加该文件。抱歉我无法提供更多帮助。:(

其他提示

经过对 SQL Server 2008 R2 的一些研究:

  1. 添加到SP_SEND_DBMAIL @ansi_attachment bit = 0中执行为'dbo'

  2. 代替

    如果(@attachmentsexist = 1)开始.......结尾

和:

IF(@AttachmentsExist = 1)
BEGIN
    if (@ANSI_Attachment = 1) 
    begin
        --Copy temp attachments to sysmail_attachments      
        INSERT INTO sysmail_attachments(mailitem_id, filename, filesize, attachment)
        SELECT @mailitem_id, filename, filesize, 
                convert(varbinary(max), 
                    substring( -- remove BOM mark from unicode
                        convert(varchar(max), CONVERT (nvarchar(max), attachment)), 
                        2, DATALENGTH(attachment)/2
                    )
                )

        FROM sysmail_attachments_transfer
        WHERE uid = @temp_table_uid
    end else begin
        --Copy temp attachments to sysmail_attachments      
        INSERT INTO sysmail_attachments(mailitem_id, filename, filesize, attachment)
        SELECT @mailitem_id, filename, filesize, attachment
        FROM sysmail_attachments_transfer
        WHERE uid = @temp_table_uid
    end
END

为了使文件为 ANSI/UTF-8

更改位于的 sp_send_dbmail msdb 将此行与其他变量一起使用: @ANSI_Attachment BIT = 0IE。

@mailitem_id INT = NULL OUTPUT,
     @ANSI_Attachment BIT = 0
     WITH EXECUTE AS 'dbo'

然后将此行添加到对 sp_send_dbmail 的调用中:

@ansi_attachment = 1

那么它应该给你一个 ansi 附件而不是 unicode。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top