UPPER komutunda küçük i harfinin büyük I harfine dönüşme sorunu

2 Eyl by NURULLAH ÇAKIR

UPPER komutunda küçük i harfinin büyük I harfine dönüşme sorunu

SELECT UPPER([Kullanici])  FROM [DBName].[dbo].[Tablo] 

gibi bir sorgu yazdığınızda sorgu sonucunda küçük i harfi büyük I harfine dönüşebilir. Bunun sebebi collation olarak CI(Case Insensitive) kullanmanızdır. Peki bu sorunu nasıl aşacağız. Kodumuzu aşağıdaki şekilde değiştirdiğimizde sorun düzelecektir.

SELECT UPPER([Kullanici] COLLATE Turkish_CS_AS)  FROM [DBName].[dbo].[Tablo]

Bazen sorguda değişiklik yapamacağımız durumlar oluşabilir. Uygulama kapalı bir kütüphane ile bu işlemi yapıyor olabilir. Böyle bir durumda veritabanında kolon bazlı collation değiştirme işlemini yapabiliriz.

 

Collatin değiştirmek riskli bir işlemdir. Bu işlemi yapmadan önce mutlaka test ortamında denemelisiniz. Aslında herzaman “hiçbir işlemin testi yapılmadan production ortamında yapılmaz” ilkesine göre hareket etmeliyiz. Ve “Her işlemden önce mutlaka backup alınmalı” ilkesine dayanarak işlemden hemen önce backup’ımızı da almalıyız. Eğer collation’ını değiştireceğimiz kolona ait bir constaint varsa aşağıdaki hatayı alacaksınız.

 

Msg 5074, Level 16, State 1, Line 1

The object ‘UQ__xxx is dependent on column ‘Kullanici’.

 

Belirtilen Constaint’e sağ tıklayıp script index as Drop and Create to diyerek drop ve create script’ini almalısınız.

 

Öncelikle sadece drop constraint kısmını çalıştırıp daha sonra aşağıdaki şekilde kolonun collation’ınını değiştirmelisiniz.

ALTER TABLE [dbo].[Tablo] ALTER COLUMN [Kullanici]  
            [nvarchar](56)COLLATE Turkish_CS_AS NOT NULL;  
GO  

Yukarıdaki scriptte biz Turkish_CI_AS olduğu için Turkish_CS_AS ye dönüştürdük. Siz de hangi collation’ı kullanıyorsanız sadece CI kısmını CS yazarak yukarıdaki script’i çalıştırmalısınız.

 

Collatin değiştirme işlemi tamamlandıktan sonra drop ettiğimiz constraint’i aldığımız script’in kalan kısmını çalıştırarak yeniden oluşturmalıyız.

 

Burada dikkat edilmesi gereken önemli bir husus olarak bu işlemleri yaparken uygulamanın çalışmıyor olması gerekiyor.

 

Örneğin benim örneğimde constaint unique’liği sağlayan bir constraint ti. Ben bu işlemleri yaparken uygulama çalışıyor olsaydı unique’liği bozan bir kayıt gelip benim aynı constraint’i yeniden oluşturmama engel olurdu.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir