SQL Server’da DBCC CHECKIDENT Kullanımı

Herkese merhaba,

Bu yazıda SQL Server’da DBCC CHECKIDENT kullanımından bahsedeceğim.

SQL Server’da IDENTITY alanı bulunan bir tabloda o alandaki sayılar verilmiş değere göre ardışık olarak ilerler. Her yeni kayıtta bu sayı belirtilen değere artar. Bu kayıtlardan biri silindiği zaman o satıra ait IDENTITY değeri bir daha kullanılamaz. Bir süre sonra silmelerden dolayı tablo üzerindeki IDENTITY alanında çok fazla atlamalar söz konusu olur. İşte konumuz bununla ilgili.

DBCC CHECKIDENT komutu bu işlemi yapmamızı sağlar.

DBCC CHECKIDENT ('Tablo Adı', RESEED, Başlangıç Sayısı)

Kullanımı yukarıdaki gibidir.

Aşağıdaki örnek kullanımı sizler de inceleyebilirsiniz.

-- IDENTITY bulunan bir temp tablo oluşturalım ve içerisine değerleri sysobjects tablosundan aktaralım

SELECT ID = IDENTITY(INT, 1, 1),
       name
INTO ##Tablomuz
FROM dbo.sysobjects;

-- 20 üzerindeki tüm satırları silelim. 

DELETE FROM ##Tablomuz
WHERE ID > 20;

--Tablodaki identity kolonundaki en yüksek değeri okuyalım

SELECT IDENT_CURRENT('##Tablomuz') AS IdentityDegeri;

--Bu örnek için bende 104 değerini döndü. Yani yeni bir kayıt ekleyecek olursa ona 105 değeri verilecek. 
--Oysa tabloda şu anda 20 kayıt var ve 21 ile başlaması lazım.

-- Tabloyu table scan yapıp max identity değerini alalım. Tablodaki en yüsek ID'yi bir değişkene atayalım
DECLARE @maksimumdeger INT =
        (
            SELECT MAX(ID)FROM ##Tablomuz
        ); --Bu sorgu 20 değerini döndürecek

-- IDENTITY kolonunun başlangıcını 20 olarak set edelim
DBCC CHECKIDENT('##Tablomuz', RESEED, @maksimumdeger);

-- Test amaçlı yeni kayıt ekleyelim. Bu kaydın değeri 11 olarak oluşturulacak
INSERT INTO ##Tablomuz
VALUES
('Yeni Kayıt');

--Tabloyu kontrol edelim

SELECT *
FROM ##Tablomuz;

Kodu çalıştırdığınızda aşağıdaki gibi bir sonuç alacaksınız.

SQL Server'da DBCC CHECKIDENT Kullanımı

Görüldüğü DBCC CHECKIDENT ile  IDENTITY alanını yeniden düzenlemiş olduk.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

739 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!