Tabloda Aynı İsimli İki Sütun Oluşturmak

Aynı tabloda aynı isimli iki kolon yaratma işlemine başlamadan önce “collation” nedir sorusunun cevabını verelim.

Collation, SQL Server’ da “character set” anlamına gelmektedir. Eşitliklerde, sıralama işleminde, büyük küçük harf ayrımında karakterlerin hangi mantıkta kullanılacağını belirler. Genelde Türkçe veritabanlarında kullanılan Turkish_CI_AS ya da SQL_Latin1_General_CP1254_CI_AS collation name deki “CI” ifadesi “Case Insensitive (Büyük küçük harf ayrımı olmasın)” anlamına gelmektedir.

Özellikle SQL Server 2000′ de collation name olarak Turkish_CI_AS seçilmekteydi, fakat SQL Server 2005 ve SQL 2008′ e geçiş sonrasında daha çok SQL_Latin1_General_CP1254_CI_AS kullanılmaya başlanmıştır.

Şimdi sevdiklerimizi şaşırtacağımız belki de iddiaya girerek tadelle kazanacağımız kodu anlatalım 🙂

Öncelikle SQL Management Studio yeni sorgu ekranımızda sevdiğimiz yazılımcıları şaşırtacağımız sürpriz isimli yeni bir veri tabanı yaratalım.

Daha sonra yaratmış olduğumuz veri tabanı içinde sütun isimleri aynı olan bir tablo yaratmaya çalışalım.

Komutu çalıştırdığınızda “Column names in each table must be unique. Column name ‘wait_time’ in table ‘COLLATION_TEST’ is specified more than once.” şeklinde bir hata alacaksınız. Bunun sebebi varsayılan collation ayarının SQL_Latin1_General_CP1_CI_AS olmasıdır. Bu dil seçiminde aynı tablo içinde aynı isimli sütun yaratılmasına izin verilmez. Bu durumu COLLATION kullanarak az da olsa değiştirebiliriz.

  • Şimdi sırasıyla aşağıdaki kodları çalıştırarak DB varsayılan dil yapısını değiştirelim. Ve sonrasında tablomuzu yaratalım.
    ALTER DATABASE SURPRISE SET SINGLE_USER WITH ROLLBACK IMMEDIATEALTER DATABASE SURPRISE COLLATE Turkish_CI_ASALTER DATABASE SURPRISE SET MULTI_USER

Hatasız şekilde Commands completed successfully. mesajımız geldi.

Aslında burada yapılan küçük bir hile Türkçe dilinde büyük I ve küçük i karakterleri ingilizcenin aksine aynı değildir (Iı ve İi).

Peki sadece sütun adında i karakteri olanlar için mi bu sürprizi yapabiliriz:) Hayır daha fazlası için CASE SENSITIVE bir COLLATION SET edebiliriz.

Tabi şaşırtmak istediğimiz yazılımcı arkadaşların büyük/küçük harf duyarlılığı da önemli 🙂

Umarım işinize yarar.

Kaynak: tanerhacioglu.com

1 Comment

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir