Identitiy column ve manual olarak bu kolona insert yapmak(Identitiy insert)
Bu makaleyi okumadan önce Primary Key ve Foreign Key hakkında bilginiz olması gerekiyor. “Primary Key ve Foreign Key” isimli makalemden faydalanabilirsiniz. Identity column bir tablodaki bir kolonda otomatik artan değerler anlamına gelir. Örneğin tabloda ID isimli unique bir kolon oluşturmak istediniz. Bu değer’i tabloya her kayıt geldiğinde 1 er 1 er artacak şekilde set etmeye ihtiyacınız oldu. Bu kolon üzerinde identity özelliğini tanımlayarak bunu sağlayabilirsiniz. Identity özelliği set edilmiş bir kolona insert geldiğinde insert cümleceği içersinde bu kolon belirtilmez. SQL Server arka tarafta her kayıt geldiğinde bu kolonun değerini bir arttırarak devam eder. Tablo oluştururken ya da sonradan, bir kolon için bu özelliği tanımlayabilirsiniz. Mevcut tablodaki mevcut bir kolon için identity özelliği set edilemez. Bu işlemi başka bir yöntemle yapacağız. Makalenin ilerleyen kısımlarında bu yönteme değineceğim.
Aşağıdaki script yardımıyla tablo oluştururken ID kolonu üzerinde değeri 1 er 1 er artan bir Identity özelliği set edelim.
CREATE TABLE myIdentity ( ID int IDENTITY(1,1), Sehir varchar (200), Ulke varchar (200) );
Şimdi aşağıdaki script yardımıyla bu tabloya bir kayıt ekleyelim. Aşağıdaki scriptte göreceğiniz üzere tablomuzda 3 kolonumuz olmasına rağmen insert cümleciğinde 2 kolon var.
INSERT INTO [dbo].[myIdentity]([Sehir],[Ulke]) VALUES ('Adana','Türkiye') GO INSERT INTO [dbo].[myIdentity]([Sehir],[Ulke]) VALUES ('Adıyaman','Türkiye')
Insert cümleciklerini çalıştırdıktan sonra tabloya select çekerek ID kolonuna hangi değerleri atadığını görebilirsiniz.
Select * From dbo.myIdentity
Gördüğünüz gibi Adana için ID değeri olarak 1 değeri Adiyaman içinse 2 değeri otomatik olarak set edildi.
Bazen tablolarımızı başka bir veritabanına taşımamız gerekir. Böyle durumlarda bir çok yöntem kullanılabilir. Örneğin tablomuzun script’ini alarak içindeki kayıtları yeni oluşturduğumuz tabloya insert etmeye çalışalım ve mevcut ID değerlerininde yeni tabloda yeniden otomatik olarak oluşturulmadan eski tablodaki mevcut değerleriyle aktarılmasını sağlayalım.
Normalde aşağıdaki script yardımıyla bu işlemi yapabiliriz.
Insert Into [myIdentityYeni] Select * From myIdentity
Fakat myIdentityYeni tablosunda identity özelliğe sahip ID kolonu olduğu için aşağıdaki gibi hata verecektir.
İhtiyacımız olan işlemi yapabilmek için sorguyu aşağıdaki şekilde değiştirmemiz gerekir.
SET IDENTITY_INSERT [myIdentityYeni] ON GO Insert Into [myIdentityYeni] (ID,Sehir,Ulke) Select * From [myIdentity] GO SET IDENTITY_INSERT [myIdentityYeni] OFF
Sorguyu yukarıdaki şekilde çalıştırdıktan sonra insert işlemimiz gerçekleşmiş olacaktır.
Tablo oluşturduktan sonra mevcut kolon için identity özelliği set edilemez. Böyle bir ihtiyacınız varsa identity özelliği olacak şekilde tabloyu yeniden oluşturup mevcut tablodaki kayıtları yeni tabloya yukarıdaki yöntemle aktarabilirsiniz.