1

sp_send_dbmail他のプログラムに供給されるファイルを生成して送信するために使用します。プログラムは、「ANSI/ASCII」および「ISO-8859-1」エンコーディングをダイジェストします。しかし、私はそれを作ることができませんsp_send_dbmail

プロシージャコールは次のようになります

exec msdb.dbo.sp_send_dbmail 
    @profile_name= @profile_name, 
    @recipients  = @recipients,
    @body = @body,
    @subject = @subject,
    @attach_query_result_as_file = 1, 
    @query_result_header = 0,
    @query_result_no_padding = 1,
    @query = @query,
    @query_attachment_filename = @fname,
    @query_result_width = 4000,
    @mailitem_id = @mailitem_id OUTPUT

したがって、添付ファイルは、渡されたクエリの結果から作成されます。しかし、何らかの理由で実際にメールに添付される結果のファイルは、UCS2 リトル エンディアンでエンコードされています。それを変更する方法はありますか?

4

1 に答える 1

4

UTF/ANSI を切り替えることができる回避策が見つかりました。sp_send_dbmailそのためには、次のように変更する必要があります。

  1. 次のようなプロシージャに新しいパラメータを追加します@ANSI_Attachment BIT = 0
  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 `

これは同じことを行いますが、プロシージャ コールで @ANSI_Attachment = 1 を使用すると、送信前に Unicode BOM マークが削除されます。

ここでその解決策を覗いた

于 2013-04-10T06:35:22.473 に答える