26 Mart 2014 Çarşamba

Identity Key sorunu

Bugün bir iş arkadaşım aşağıdaki gibi bir hata aldıklarını söyledi:


Msg 2627, Level 14, State 1, Procedure SP_adi, Line 33
Violation of PRIMARY KEY constraint 'PK_tabloAdi_log'. Cannot insert duplicate key in object 'dbo.tabloAdi_log'. The duplicate key value is (19).

Yukarıdaki hata mesajını şöyle yorumladım: dbo.tabloAdi_log isimli tabloda PK_tabloAdi_log adında bir Primary Key Constraint'i var ve PK olarak belirlenen alana, bu alanda zaten olan 19 değeri tekrar girilmeye çalışılıyor.

Önce bu tablodaki Primary Key alanının hangisi olduğunu belirledim. Sonra bu alanın IDENTITY özelliğinin açık olup olmadığına baktım. Bunları belirledikten sonra bu alana kayıt girmeye çalışan SP'yi kontrol ettim. Her şey doğru görünüyordu, SP açık olarak ilgili PK alanına bir değer INSERT etmeye çalışmıyordu, yani sıradaki Identity değeri neyse onun oluşturulması gerekiyordu.

Daha sonra aşağıdaki komut ile bu tabloda otomatik olarak oluşturulan Identity değerinin ne olduğunu kontrol ettim:

SELECT IDENT_CURRENT('dbo.tabloAdi_log')

Yukarıdaki komutun sonucu 19 olarak geldi. Yani hata mesajımda aldığım değer ile aynı. SQL Server bu tablodaki PK alanında 19 değerini oluşturmaya çalışıyordu, fakat tabloda bu değer zaten olduğu için hata alıyordum.

ve aşağıdaki komut ile de tablodaki o anda bulunan en büyük değeri buldum:

SELECT MAX(id) FROM dbo.tabloAdi_log

Yukarıdaki komutun sonucu da 13617043 çıktı.

Henüz bulamadım, ama bir şekilde bir işlem tablonun SEED'ini değiştirmişti ve yeni oluşturulan Identity değerleri 19'dan devam ediyordu. Hata da bu nedenle alınıyordu. Aşağıdaki komut ile SEED değerini 13617044'ten devam ettirdim.

DBCC CHECKIDENT (dbo.tabloAdi_log, reseed, 13617044)

Ve sorunumuz çözülmüş oldu.

4 yorum:

Serdar Tevfik GÜRBÜZ dedi ki...

Teşekkürler. Akşamım sayenizde rezil olmadı.

Esat ARSLAN dedi ki...

Paylaşım için teşekkürler. Çok faydası dokundu.

Unknown dedi ki...

Teşekkürler.

Adsız dedi ki...

Paylaşımınız için teşekkürler