SQL Server için sp_send_dbmail‘de Ekleme Kodlamasını Nasıl Değiştirirsiniz

SQL Server aracılığıyla ekli e-postalar göndermek basit bir görev olabilir. Ancak, eklentinin UCS-2 kodlamasıyla gönderildiği ve bunun ANSI veya UTF-8 olarak gönderilmesini istediğiniz bir sorunla karşılaşırsanız, yalnız değilsiniz. Birçok kullanıcı benzer sorunlarla karşılaşmıştır, özellikle SQL Server 2005’te sp_send_dbmail saklı prosedürünü kullanırken. Bu blog yazısında sorunu tartışacak ve eklentilerinizin doğru bir şekilde kodlandığından emin olmanız için bir çözüm sunacağız.

Sorun

sp_send_dbmail işlevini kullanarak SQL sorgu sonuçlarını ek olarak gönderdiğinizde, sonuçların UCS-2 formatında kodlandığını görebilirsiniz. Bu format, alıcılar için sorun oluşturabilir çünkü ANSI veya UTF-8 formatlarını bekleyen çeşitli uygulamalarla uyumlu olmayabilir.

Örnek Senaryo

Sizin senaryonuzda, sp_send_dbmail ile çalıştırdığınız sorgu aşağıdaki gibidir:

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

Gözlemlenen Sorun

Yukarıdaki SQL kodunu uygulamanıza rağmen, sonuçlarınız hala UCS-2 kodlamasıyla gönderiliyor ve SQL Server 2005 SP2’de bir düzeltmenin mevcut olduğu hakkında bazı yorumlar belirttiniz, ancak durumunuzda bunun böyle görünmediğini söylediniz.

Çözüm

sp_send_dbmail aracılığıyla kodlamayı doğrudan değiştirmek için sınırlı seçenekler olsa da, bu sorunu BCP (Bütün Kopyalama Programı) aracını kullanarak aşabilirsiniz.

Doğru Kodlama için BCP Kullanma

  1. Verileri Düz Dosyaya Aktarın: BCP’yi kullanarak sorgunuzun sonuçlarını düz bir dosyaya aktarmak için kullanın. BCP, aktarma işlemi sırasında kodlama formatını belirtmenizi sağlar.

    bcp "SELECT RTRIM(@string_to_trim), 'tom'" queryout "C:\path\to\results.csv" -c -C 65001 -T
    
    • -c seçeneği karakter modunu belirtir.
    • -C 65001 seçeneği UTF-8 kodlamasını belirtir.
    • -T seçeneği SQL Server’a güvenilir bir bağlantı kullanır.
  2. Düz Dosyayı Ekleyin: İstenilen kodlama ile dosya oluşturulduktan sonra, bu dosyayı e-posta ile geleneksel yöntemlerle ekleyebilirsiniz. Bu, bir betik aracılığıyla veya SQL Server Agent işleri üzerinden, bu BCP komutunu çalıştırıp ardından sp_send_dbmail ile e-postayı gönderecek şekilde yönetilebilir.

Adımların Özeti

  • Sorgu sonuçlarınızı UTF-8 kodlamasıyla bir .csv dosyasına dökmek için bir BCP komutu çalıştırın.
  • .csv ekli bir e-posta göndermek için sp_send_dbmail kullanın.

Sonuç

İlk başta zorlu gibi görünse de, sp_send_dbmail eklerinizdeki UCS-2 kodlama sorununu çözmek, BCP kullanımında yönetilebilir. Yukarıda belirtilen adımları izleyerek, eklentilerinizin doğru bir şekilde kodlandığından emin olabilir ve alıcılarınızın sağlanan bilgileri erişimini ve kullanımını kolaylaştırabilirsiniz.

Hala sorun yaşıyorsanız veya başka sorularınız varsa, lütfen ulaşmaktan çekinmeyin!