Bu makalede Sql Server ortamlarında oluşturulan veritabanlarının kolun türünün değiştirilmesi ile ilgili bir talep geldiğinde ne gibi senaryolar oluşturacağız. Gerçek sistemde bu işlemden önce backup alınması gerekmektedir.
Kullanıcılardan gelen herhangi bir kolunda bulunan tür değerinin artırılması. Örneğin varchar(1000) olan kolun türünün varchar(100) olarak değiştirilmesi veya Varchar(200) olan kolun türünün varchar(50) olarak değiştirilmesinde herhangi bir sakıncası yoktur.
60 olan kolun uzunluğunun 100 olarak değiştiriyorum. Bu değişikliği yaptıktan sonra tasarım ekranından çıkıyorum. Bu yapımızda herhangi bir bozulmaya sebebiyet vermeyecektir.

Eğer değişim sırasında aşağıdaki ekran görüntüsündeki hata ile karşılaşırsak ilgili makaleyi okuyabilirsiniz.

Veritabanı altında bulunan tablomuzda herhangi bir kolun tipi değişimi istendiğinde aşağıdaki yollar izlenmektedir. Tür değişim işlemlerinde verinizin bozulma riskiyle karşı karşıya gelebilirsiniz. Güvenilir ve tavsiye edilen yöntemi yapalım.
SSMS arayüzünde veritabanı altında tip değişimi yapacağımız tablomuza gelinir sağ tıklanıp Design denilir.

Gelen ekranda nvarchar olan kolun tipimizi varchar(max) yapıyoruz.

Kolun tipimizi değiştirdik. Yeni belirlemiş olduğumuz kolun tipinde sıkıntı yaşamamak için Sql Server veri tiplerini iyi bilmemiz gerekiyor.

Tip değişikliği yaptıktan sonra Design ekranında herhangi bir alana sağ tıklayıp Generate Change Script… bölümüne tıklanır. Bu bölümden sonra karşımıza Saving changes is not permitted hatası çıkarsa ilgili makaleyi okuyabilirsiniz.

Gelen ekranda arka planda çalışacak script’i kopyalayıp No deyip işlemleri sonlandırıyorum.

Yukarıdaki script’i kopyaladıktan sonra yeni bir query açıp script’i çalıştırıyoruz. İlgili kod bloğumuzda ilk başta gerçek tablomuzla aynı yapıda bir tablo oluşturuyor. Daha sonra gerçek tabloyu silmeden önce gerçek tablonun içindeki verileri yeni oluşturduğu tabloya aktarıyor. Son adımda ise yeni tablo ismini gerçek tablo ismiyle gerçekleştiriyor.

Dikkat edersek sadece bir kolun tipini değiştirdik sql server arka plan yeni bir tablo oluşturarak verilerimizi atmamızı sağladı.
Not: Tek sefer de tablomuzun boyutu kadar veri çekip tekrar yazdığı için ilgili veritabanının log dosyasında bu tablonun 2 katı kadar yer olması gerekmektedir.
Aşağıdaki komut yardımıyla da ilgili kolunda değişiklik yapabiliriz. Bu yapı veri kaybetmemize sebebiyet vereceği için tercih edilmez.
USE [AdventureWorks2012]
ALTER TABLE [Person].[Address]
ALTER COLUMN [AddressLine1] [nvarchar](max) NULL

Not: İlgili kolun değişikliğinde kolun üzerinde herhangi bir indexs yapısı varsa çalışmayacaktır.

Bu makalede Sql Server veritabanında bir tablo üzerinde herhangi bir kolun türü değişimini ele almış olduk.
Başka bir makalede görüşmek dileğiyle.
Onlar – ” Söz Verdiklerinde Sözünde Dururlar.” Bakara / 177