วิธีเปลี่ยนการเข้ารหัสแนบใน 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 = '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
ปัญหาที่สังเกตเห็น
แม้ว่าคุณจะได้ดำเนินการตามรหัส SQL ข้างต้น ผลลัพธ์ของคุณก็ยังถูกส่งในรูปแบบ UCS-2 และคุณได้กล่าวถึงความคิดเห็นเกี่ยวกับการแก้ไขที่มีให้ใน SQL Server 2005 SP2 แต่ดูเหมือนว่ากรณีของคุณจะไม่ใช่เช่นนั้น
วิธีแก้ปัญหา
ในขณะที่อาจมีตัวเลือกที่จำกัดในการเปลี่ยนแปลงการเข้ารหัสโดยตรงผ่าน sp_send_dbmail
คุณสามารถทำงานรอบปัญหานี้โดยการใช้ BCP (Bulk Copy Program)
การใช้ 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 โดยการปฏิบัติตามขั้นตอนที่อธิบายไว้ข้างต้น คุณสามารถมั่นใจได้ว่าไฟล์แนบของคุณจะถูกเข้ารหัสอย่างถูกต้อง ทำให้ง่ายสำหรับผู้รับในการเข้าถึงและใช้ข้อมูลที่ให้ไว้
หากคุณยังคงประสบปัญหาหรือมีคำถามเพิ่มเติม โปรดติดต่อเรา!