كيفية تغيير ترميز المرفقات في 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 للتشفير الصحيح
-
تصدير البيانات إلى ملف نصي: استخدم 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.
- تشير خيار
-
إرفاق الملف النصي: بمجرد إنشاء الملف بالتشفير المطلوب، يمكنك إرفاق هذا الملف بالبريد الإلكتروني باستخدام الأساليب التقليدية. يمكن إدارة ذلك من خلال سكربت أو عبر وظائف SQL Server Agent حيث يمكنك تنفيذ هذا الأمر BCP متبوعًا بـ sp_send_dbmail لإرسال البريد الإلكتروني.
ملخص الخطوات
- تنفيذ أمر BCP لتفريغ نتائج استعلامك في ملف .csv مع ترميز UTF-8.
- استخدام
sp_send_dbmail
لإرسال بريد إلكتروني مع مرفق .csv.
الخلاصة
على الرغم من أنه قد يبدو مقلقًا في البداية، إلا أن حل مشكلة ترميز UCS-2 مع مرفقات sp_send_dbmail
الخاصة بك هو أمر قابل للإدارة باستخدام BCP. من خلال اتباع الخطوات الموضحة أعلاه، يمكنك ضمان ترميز مرفقاتك بشكل صحيح، مما يسهل على مستلميك الوصول إلى المعلومات المقدمة واستخدامها.
إذا كنت لا تزال تواجه مشكلات أو لديك أي أسئلة إضافية، لا تتردد في التواصل!