كيفية تغيير ترميز المرفقات في sp_send_dbmail لـ SQL Server

إرسال رسائل البريد الإلكتروني مع مرفقات عبر SQL Server يمكن أن يكون مهمة بسيطة. ومع ذلك، إذا واجهت مشكلة حيث يتم إرسال المرفق كترميز UCS-2 وتريد أن يكون بتنسيق ANSI أو UTF-8، فأنت لست وحدك. العديد من المستخدمين واجهوا مشكلات مماثلة، خاصة عند استخدام إجراء المخزن sp_send_dbmail في SQL Server 2005. في هذا المنشور، سنناقش المشكلة ونقدم حلاً لضمان ترميز مرفقاتك بشكل صحيح.

المشكلة

عند استخدام وظيفة sp_send_dbmail لإرسال نتائج استعلام SQL كمرفقات، قد تجد أن النتائج مشفرة بتنسيق UCS-2. يمكن أن يكون هذا التنسيق مشكلة للمستلمين حيث قد لا يتناسب مع تطبيقات مختلفة تتوقع تنسيقات ANSI أو UTF-8.

سيناريو المثال

في حالتك، الاستعلام الذي تقوم بتشغيله مع sp_send_dbmail هو كما يلي:

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 = 'انظر المرفق',
    @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

المشكلة الملاحظة

على الرغم من تنفيذ الكود SQL أعلاه، لا تزال نتائجك تُرسل كترميز UCS-2 وقد ذكرت بعض التعليقات حول وجود إصلاح متاح في SQL Server 2005 SP2، ولكن يبدو أن هذا ليس هو الحال في وضعك.

الحل

في حين أن الخيارات قد تكون محدودة لتغيير الترميز مباشرةً من خلال sp_send_dbmail، يمكنك تجاوز هذه المشكلة باستخدام أداة BCP (برنامج النسخ الجماعي).

استخدام BCP للتشفير الصحيح

  1. تصدير البيانات إلى ملف نصي: استخدم BCP لتصدير نتائج الاستعلام الخاص بك إلى ملف نصي. يسمح لك BCP بتحديد تنسيق الترميز أثناء عملية التصدير.

    bcp "SELECT RTRIM(@string_to_trim), 'tom'" queryout "C:\path\to\results.csv" -c -C 65001 -T
    
    • تشير خيار -c إلى وضع الأحرف.
    • يحدد خيار -C 65001 ترميز UTF-8.
    • يستخدم خيار -T اتصال موثوق مع SQL Server.
  2. إرفاق الملف النصي: بمجرد إنشاء الملف بالتشفير المطلوب، يمكنك إرفاق هذا الملف بالبريد الإلكتروني باستخدام الأساليب التقليدية. يمكن إدارة ذلك من خلال سكربت أو عبر وظائف SQL Server Agent حيث يمكنك تنفيذ هذا الأمر BCP متبوعًا بـ sp_send_dbmail لإرسال البريد الإلكتروني.

ملخص الخطوات

  • تنفيذ أمر BCP لتفريغ نتائج استعلامك في ملف .csv مع ترميز UTF-8.
  • استخدام sp_send_dbmail لإرسال بريد إلكتروني مع مرفق .csv.

الخلاصة

على الرغم من أنه قد يبدو مقلقًا في البداية، إلا أن حل مشكلة ترميز UCS-2 مع مرفقات sp_send_dbmail الخاصة بك هو أمر قابل للإدارة باستخدام BCP. من خلال اتباع الخطوات الموضحة أعلاه، يمكنك ضمان ترميز مرفقاتك بشكل صحيح، مما يسهل على مستلميك الوصول إلى المعلومات المقدمة واستخدامها.

إذا كنت لا تزال تواجه مشكلات أو لديك أي أسئلة إضافية، لا تتردد في التواصل!