SQL (Structured Query Language), veritabanı yönetim sistemlerinde verileri yönetmek, sorgulamak ve işlemek için yaygın olarak kullanılan bir dildir. SQL fonksiyonl...
SQL Server'da IDENTITY_INSERT İle İstenilen Id Değerini Ekleme
SQL Server'da bazı verileri taşırken Id değerleri bizim için önemli olabilmektedir. Bunu durumda ise Id değeri otomatik artan olduğunda bizim için sorun olabilmektedir. Bunun yanı sıra da tabloya eklediğiniz veride bir silme işlemi yaptığınızda silinen Id değeri artık kullanılmıyor. Çünkü SQL Server'da Id değeri otomatik artan olduğu için silinen Id değerini atlayarak devam edecektir. Eğer Id değerini değiştirmek ya da sıfırlamak isterseniz bunun için de bir yöntem bulunmaktadır. Bunun için Identity Kolonunun Başlangıç Değerini Değiştirmek adlı yazıma da göz atabilirsiniz. Şimdi gelelim asıl konumuz olan Id değerini istediğimiz değeri vererek kayıt eklemeye...
Mevcut Durum
Tabloda gördüğünüz gibi 77 numaralı Id değerinden sonra 115 numaralı Id değerine geçtiğini görebilirsiniz. Biz bu Id değerleri arasına veri eklemek istediğimizde SQL Server buna izin vermeyecek ve hata verecektir. Mevcut SQL INSERT kodumuz aşağıdaki gibidir.
INSERT INTO dbo.Products(ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued)
VALUES(78, N'Ürün 1', 12, 2, N'1 kg', 13.00, 32, 0, 15, CONVERT(bit, 'False')),(79, N'Ürün 1', 12, 2, N'1 kg', 13.00, 32, 0, 15, CONVERT(bit, 'False'))
Çözüm
INSERT işlemimizin başına ve sonuna bir satır kod eklerek istediğimiz Id değerine kayıt ekleyebiliriz. INSERT tanımından önce SET IDENTITY_INSERT ekleyip tablo adını yazıp ON değimini ekliyoruz. Burada aslında bu tablo için IDENTITY_INSERT durumunu aktif ediyoruz. Var olan INSERT kodumuzu yazıp sonrasında yine aynı şekilde SET IDENTITY_INSERT ekleyip tablo adını yazıp ardından OFF değimini ekliyoruz. Burada da tablomuz için IDENTITY_INSERT durumunu pasif hale getiriyoruz. SQL kodumuzda bu değişiklikleri yaptığımızda Execute(F5) edip çalıştırdığımızda verilerin eklendiğini görebilirsiniz.
SET IDENTITY_INSERT dbo.Products ON
INSERT INTO dbo.Products(ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued)
VALUES(78, N'Ürün 1', 12, 2, N'1 kg', 13.00, 32, 0, 15, CONVERT(bit, 'False')),(79, N'Ürün 1', 12, 2, N'1 kg', 13.00, 32, 0, 15, CONVERT(bit, 'False'))
SET IDENTITY_INSERT dbo.Products OFF
Sorgu Sonucu
Umarım faydalı olmuştur. İyi çalışmalar dilerim.
Yorum yapabilmek için giriş yapmalısınız. Giriş yapmak için tıklayınız.