Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS

  1. erhan
    7
    194
    11/8/2018 9:26:00 AM

    Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Turkish_CI_AS" in the equal to operation

    Hatası alıyorum , temp tablo ve normal tablomu join ederken , daha önce temp ile normal sql server tablosunu join etmiştim , ancak neden şimdi böyle bir hata veriyor , acil yardım bekliyorum

     select * from TblVehiclePart  as tv 
     inner join #TempiscilikPart  as t on t.pn=tv.PartName
    
    sql-server sql-server-2014 9 gün önce 56 Görüntüleme

( 1 ) Cevap

  1. Snoopy
    4
    8436
    11/8/2018 9:47:00 AM

    Neden böyle bir hata alıyorsun sorunuza yanıt ;

    temp tablosu sistem veritabanlarından(System Databases) tempdb veritabanında tutulur , bu yüzden kendi veitabanından bir tablo ile join etmeye çalıştığında aslında iki farklı veritabanından tabloları join etmeye çalışmış olursun.

    Aslında bu işlemde hiç bir sakınca yok , sadece sorun oluşturabilecek durumlar var ve sen bir tanesini yaşamışsın.

    Eğer veritabanlarının arasında Collation uyuşmazlığı çıkarsa bu yaşadığın hatayı alırsın. Uyuşmazlıktan kasıt veritabanlarından birisinin Collation ayarı SQL_Latin1_General_CP1_CI_AS iken diğeri de Turkish_CI_AS olması.

    Çözüm için bir uzlaşma lazım.

    Çözüm ;

    Sorgunun sonuna COLLATE TURKISH_CI_AS deyimini yerleştirmek

    yada yine

    Sorgunun sonuna COLLATE SQL_Latin1_General_CP1_CI_AS deyimini yerleştirmek

     select * from TblVehiclePart  as tv 
     inner join #TempiscilikPart  as t on t.pn=tv.PartName
     COLLATE TURKISH_CI_A
    

    Ek Bilgi , Db Collation Bilgisi ;

    database-collation-Cannot-resolve-the-collation-conflict

Cevabınız