Üzerinde IDENTITY alanı bulunan bir tabloda o alandaki sayılar verilmiş ritmik değere göre ardışık gider. Her yeni kayıtta bu sayı artar. Bu kayıtlardan biri silindiği zaman o satıra ait IDENTITY değeri bir daha kullanılmaz. Dolayısıyla bir süre sonra silmelerden dolayı bu sayı dizisinde çok fazla atlamalar söz konusu olur. Bazı durumlarda bu alanı baştan numaralandırma durumumuz olabilir mi. Bu tablonun başka bir tabloyla ilişkili olması da göz önünde bulundurularak bir güncelleme işlemi yapılabilir.
Veya bir tablodaki kayıtları başka bir tabloya aktardığımızda yeni tablodaki IDENTITY alanını yeniden düzenlemek isteyebiliriz. DBCC CHECKIDENT komutu bu işlemi yapmamızı sağlar.
DBCC CHECKIDENT (‘Tablo Adı’,RESEED, Başlangıç Sayısı)
Aşağıdaki örnekte üzerinde IDENTITY alanı bulunan geçici bir tablo oluşturulmuş ve içerisine sysobjects tablosundaki kayıtlar aktarılmış ardından tablodaki satırların çoğunluğu silinmiş. ID alanı 10 üzerinde olan tüm kayıtlar silindiği için yeni bir kayıt eklendiğinde bu numara
-- IDENTITY bulunan bir tablo oluşturalım SELECT ID = IDENTITY(INT,1,1) ,name INTO ##T FROM dbo.sysobjects -- 87 kayıt eklendi -- 10 üzerindeki tüm satırları silelim DELETE FROM ##T WHERE ID > 10 --77 kayıt silindi --Tablodaki identity kolonundaki en yüksek değeri okuyalım SELECT IDENT_CURRENT('##T') --Bu örnek için 87 döndü. Yani yeni bir kayıt ekleyecek olursa ona 88 değeri verilecek. --Oysa tabloda şu anda 10 kayıt var ve 11 ile başlaması daha mantıklı olacaktır. -- Tabloyu table scan yapıp max identity değerini alalım. Tablodaki en yüsek ID'yi bir değişkene atayalım DECLARE @maxIdentityValue INT = (SELECT MAX(ID) FROM ##T) --Bu sorgu 10 değerini döndürecek -- IDENTITY kolonunun başlangıcını 10 olarak set edeli DBCC CHECKIDENT('##T', RESEED, @maxIdentityValue) -- Test amaçlı yeni kayıt ekleyelim. Bu kaydın değeri 11 olarak oluşturulacak INSERT INTO ##T VALUES('Yeni Kayıt')
Merhabalar,
C# da sil işleme sonrası tablonun Id değerini yeniden sıralama işlemini nasıl yapabilirim?
İyi Çalışmalar.