質問

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にexecute as 'dbo'に追加

  2. 交換する

    if(@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 = 0つまり

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

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

@ansi_attachment = 1

そうすれば、Unicode の代わりに ANSI 添付ファイルが提供されるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top