sp_send_dbmail附件编码

时间:2008-09-03 21:58:04

标签: sp-send-dbmail

我在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修复的,但是没有发现它是这种情况。

3 个答案:

答案 0 :(得分:10)

在对SQL Server 2008 R2进行一些研究之后:

  1. 添加到sp_send_dbmail @ANSI_Attachment BIT = 0 WITH EXECUTE AS'dbo'

  2. 替换

    IF(@AttachmentsExist = 1)     开始 .......     END

  3. 使用:

    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
    

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为了使文件为ANSI / UTF-8

使用此行更改位于msdb的sp_send_dbmail以及其他变量:@ANSI_Attachment BIT = 0

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

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

@ansi_attachment = 1

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