SQL Serverda Identity Kolona Veri Girisi Nasil Yapilir

SQL Serverda Identity Kolona Veri Girisi Nasil Yapilir

Veritabani tablolarinda Identity kolonlar genel olarak primary keys olarak kullanilir. Bu tip kolonlar tabloya her yeni kayit girisinde otomatik olarak bir deger alirlar. Peki bu kolona kendi belirledigimiz bir degeri atamak istersek ne olur? Ilk olarak identity kolon barindiran bir tablo olusturalim ve üzerinde çalisalim. Tablomuzu asagidaki scripti kullanarak olusturun.

create table Ogrenci
(
	ID int not null identity(1,1) PRIMARY KEY,
	Ad varchar(50),
	Soyad varchar(50)
)

Yukaridaki create scriptini çalistirip tablomuzu olusturdugumuza göre bu tabloya insert yapalim.

insert Ogrenci(ID,Ad,Soyad) values(1,'Ali','RÜZGAR')
.

Yukaridaki sql scripti sonucu asagidaki hatayi aliriz.

Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table 
'Ogrenci' can only be specified when a column list
is used and IDENTITY_INSERT is ON.

Yukaridaki hatayi almamizin sebebi identity olarak belirlenmis bir kolona disardan deger atamaya çalismamizdan kaynaklanmaktadir. Bu hatayi düzeltmek için IDENTITY_INSERT özelligini etkin hale getirmemiz gerekmekte. Bunu da asagidaki script ile yapabiliriz.

SET IDENTITY_INSERT Ogrenci ON

insert Ogrenci(ID,Ad,Soyad) values(1,'Ali','RÜZGAR')
insert Ogrenci(ID,Ad,Soyad) values(2,'Mehmet Sabri','KUNT')
insert Ogrenci(ID,Ad,Soyad) values(3,'Ramazan','ÖZDEMIR')

SET IDENTITY_INSERT Ogrenci OFF

Yukariki gibi IDENTITY_INSERT özelligini kullanarak tablomuza istedigimiz kayitlari atabildik.

IDENTIT_INSERT Kullanirkan Dikkat Edilmesi Gereken Noktalar

  • Ayni zamanda sadece tek bir tablo için aktif hale getirilebilir. Bir tablo için aktif iken baska bir tablo içinde aktif hale getirmek istersek “IDENTITY_INSERT is already ON for table…” diye bir hata aliriz.
  • Bir tablo üzerinde aktif hale getirildigi zaman, bu tabloya insert islemi yaparken identity kolon içinde bir deger atamasi yapmak zorundayiz.
  • Bu konumutu çalistirabilmek için sysadmin, database owner veya db_ddladmin rollerinden en az birine sahip olmak gerekir.
  • Identity bir kolona manuel bir deger verdigimizde, eger verdigimiz deger tablodaki identity kolon için önceden atanan degerlerin hepsinden büyük olursa, identity kolon için sonraki insertlerde otomatik olarak verilecek deger bu sayidan baslayacaktir.

    Örnek :

    Ilk olarak Ogrenci tablosunda bulunan kayitlarimiza göz atalim:

    ID Ad Soyad
    1 Ali RÜZGAR
    2 Mehmet Sabri KUNT
    3 Ramazan ÖZDEMIR

    ID kolonumuz identity özellikte oldugu için yeni bir insert yaptigimiz zaman ID kolonu sirasi ile 4,5 degerlerini alacaktir. Peki biz ID kolonu için tabloda bulunan degerlerden daha büyük bir deger olan 10 degerini atarsak sonraki insertlerde ne olur ?

    .
    SET IDENTITY_INSERT Ogrenci ON
    
    insert Ogrenci(ID,Ad,Soyad) values(10,'Mesut','ATESER')
    
    SET IDENTITY_INSERT Ogrenci OFF
    

    Yukaridaki sorgudan sonra asagidaki gibi bir insert sorgusu çalistirin.

    insert Ogrenci(Ad,Soyad) values('Oguzhan','SAZAK')
    

    Ogrenci tablosundaki kayitlara baktigimiz zaman asagidaki gibi oldugunu görürsünüz. Gördügünüz gibi ID kolonuna 10 degerini manuel olarak atadiktan sonra sonraki insert isleminde 11 degerini otomatik olarak aldi.

    ID Ad Soyad
    1 Ali RÜZGAR
    2 Mehmet Sabri KUNT
    3 Ramazan ÖZDEMIR
    10 Mesut ATESER
    11 Oguzhan SAZAK
.

Bir cevap yazın

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