سؤال

أنا باستخدام sp_send_dbmail في SQL2005 إلى إرسال بريد إلكتروني مع النتائج في المرفقات.عندما يتم إرسال المرفق هو 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 بت = 0 مع تنفيذ 'dbo'

  2. محل

    إذا(@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