Cara Mengubah Pengkodean Lampiran dalam sp_send_dbmail untuk SQL Server

Mengirim email dengan lampiran melalui SQL Server bisa menjadi tugas yang sederhana. Namun, jika Anda mengalami masalah di mana lampiran dikirim sebagai pengkodean UCS-2 dan Anda ingin mengubahnya menjadi pengkodean ANSI atau UTF-8, Anda tidak sendiri. Banyak pengguna menghadapi masalah serupa, terutama saat menggunakan prosedur tersimpan sp_send_dbmail di SQL Server 2005. Dalam postingan blog ini, kita akan membahas masalah tersebut dan memberikan solusi untuk memastikan lampiran Anda dikodekan dengan benar.

Masalah

Saat menggunakan fungsi sp_send_dbmail untuk mengirim hasil kueri SQL sebagai lampiran, Anda mungkin menemukan bahwa hasilnya dikodekan dalam format UCS-2. Format ini dapat menjadi masalah bagi penerima karena mungkin tidak kompatibel dengan berbagai aplikasi yang mengharapkan format ANSI atau UTF-8.

Contoh Skenario

Dalam skenario Anda, kueri yang Anda jalankan dengan sp_send_dbmail adalah sebagai berikut:

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 = 'lihat lampiran',
    @body= 'isi sementara',
    @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

Masalah yang Diketahui

Meskipun telah menerapkan kode SQL di atas, hasil Anda tetap dikirim sebagai pengkodean UCS-2 dan Anda menyebutkan beberapa komentar tentang perbaikan yang tersedia di SQL Server 2005 SP2, tetapi tampaknya hal ini bukan yang terjadi dalam situasi Anda.

Solusi

Sementara mungkin ada pilihan terbatas untuk mengubah pengkodean langsung melalui sp_send_dbmail, Anda dapat mengatasi masalah ini dengan menggunakan utilitas BCP (Bulk Copy Program).

Menggunakan BCP untuk Pengkodean yang Benar

  1. Ekspor Data ke File Datar: Gunakan BCP untuk mengekspor hasil kueri Anda ke dalam file datar. BCP memungkinkan Anda untuk menentukan format pengkodean selama proses ekspor.

    bcp "SELECT RTRIM(@string_to_trim), 'tom'" queryout "C:\path\to\results.csv" -c -C 65001 -T
    
    • Opsi -c menunjukkan mode karakter.
    • Opsi -C 65001 menentukan pengkodean UTF-8.
    • Opsi -T menggunakan koneksi terpercaya ke SQL Server.
  2. Lampirkan File Datar: Setelah file dihasilkan dengan pengkodean yang diinginkan, Anda kemudian dapat melampirkan file ini ke email Anda menggunakan metode konvensional. Ini dapat dikelola melalui skrip atau melalui pekerjaan SQL Server Agent di mana Anda dapat mengeksekusi perintah BCP ini dan diikuti dengan sp_send_dbmail untuk mengirim email.

Ringkasan Langkah-langkah

  • Jalankan perintah BCP untuk membuang hasil kueri Anda ke dalam file .csv dengan pengkodean UTF-8.
  • Gunakan sp_send_dbmail untuk mengirim email dengan lampiran .csv.

Kesimpulan

Meskipun mungkin tampak menakutkan pada awalnya, menyelesaikan masalah pengkodean UCS-2 dengan lampiran sp_send_dbmail Anda dapat dikelola dengan menggunakan BCP. Dengan mengikuti langkah-langkah yang diuraikan di atas, Anda dapat memastikan lampiran Anda dikodekan dengan benar, sehingga lebih mudah bagi penerima Anda untuk mengakses dan memanfaatkan informasi yang diberikan.

Jika Anda masih menghadapi masalah atau memiliki pertanyaan lebih lanjut, jangan ragu untuk menghubungi kami!