문제

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. 바꾸다

    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

그러면 유니코드 대신 ANSI 첨부 파일을 제공해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top