4

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 で修正されているというコメントをインターネットで見たことがありますが、そうではないことがわかりました。

4

3 に答える 3

15

SQL Server 2008 R2 に関するいくつかの調査の後:

  1. に追加sp_send_dbmail:

    @ANSI_Attachment BIT = 0
    WITH EXECUTE AS 'dbo'
    
  2. 交換

    IF(@AttachmentsExist = 1)
        BEGIN
    .......
        END
    

    と:

    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
    
于 2013-02-03T07:43:24.003 に答える
0

ファイルを ANSI/UTF-8 にするため

この行にあるsp_send_dbmail をmsdb他の変数とともに 変更します。@ANSI_Attachment BIT = 0

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

次に、sp_send_dbmail への呼び出しに次の行を追加します。

@ansi_attachment = 1

次に、Unicode の代わりに ansi 添付ファイルを提供する必要があります。

于 2011-04-25T21:17:05.980 に答える
0

あなたが見ているものを回避する唯一の方法は、BCP を使用してデータをフラット ファイルにダンプし、そのファイルを添付することだと思います。申し訳ありませんが、これ以上お役に立てませんでした。:(

于 2008-09-03T22:12:59.727 に答える