วิธีเปลี่ยนการเข้ารหัสแนบใน 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 สำหรับการเข้ารหัสที่เหมาะสม

  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 โดยการปฏิบัติตามขั้นตอนที่อธิบายไว้ข้างต้น คุณสามารถมั่นใจได้ว่าไฟล์แนบของคุณจะถูกเข้ารหัสอย่างถูกต้อง ทำให้ง่ายสำหรับผู้รับในการเข้าถึงและใช้ข้อมูลที่ให้ไว้

หากคุณยังคงประสบปัญหาหรือมีคำถามเพิ่มเติม โปรดติดต่อเรา!