Aracılığıyla paylaş


DBCC CHECKIDENT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse Analytics

SQL Server'da belirtilen tablo için geçerli kimlik değerini denetler ve gerekirse kimlik değerini değiştirir. Kimlik sütunu için yeni bir geçerli kimlik değerini el ile ayarlamak için DBCC CHECKIDENT de kullanabilirsiniz.

Transact-SQL söz dizimi kuralları

Sözdizimi

SQL Server ve Azure SQL Veritabanı söz dizimi:

DBCC CHECKIDENT
 (
    table_name
        [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

Azure Synapse Analytics söz dizimi:

DBCC CHECKIDENT
 (
    table_name
        [ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]

Bağımsız değişken

table_name

Geçerli kimlik değerinin denetlendiği tablonun adı. Belirtilen tablo bir kimlik sütunu içermelidir. Tablo adları tanımlayıcıları için kurallara uymalıdır. Person.AddressType veya [Person].[AddressType]gibi iki veya üç bölüm adı sınırlandırılmalıdır.

NORESEED

Geçerli kimlik değerinin değiştirilmemesi gerektiğini belirtir.

RESEED

Geçerli kimlik değerinin değiştirilmesi gerektiğini belirtir.

new_reseed_value

Kimlik sütununun geçerli değeri olarak kullanılacak yeni değer.

WITH NO_INFOMSGS

Tüm bilgilendirme iletilerini gizler.

Açıklamalar

Geçerli kimlik değerinde yapılan belirli düzeltmeler parametre belirtimlerine bağlıdır.

DBCC CHECKIDENT komutu Kimlik düzeltmesi veya yapılan düzeltmeler
DBCC CHECKIDENT (<table_name>, NORESEED) Geçerli kimlik değeri sıfırlanır. DBCC CHECKIDENT geçerli kimlik değerini ve kimlik sütununun geçerli en yüksek değerini döndürür. İki değer aynı değilse, değer dizisindeki olası hataları veya boşlukları önlemek için kimlik değerini sıfırlamalısınız.
DBCC CHECKIDENT (<table_name>)

veya

DBCC CHECKIDENT (<table_name>, RESEED)
Tablonun geçerli kimlik değeri, kimlik sütununda depolanan en yüksek kimlik değerinden küçükse, kimlik sütunundaki en büyük değer kullanılarak sıfırlanır. Aşağıdaki Özel Durumlar bölümüne bakın.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) Geçerli kimlik değeri new_reseed_valueolarak ayarlanır. Tablo oluşturulduktan sonra tabloya satır eklenmemişse veya TRUNCATE TABLE deyimi kullanılarak tüm satırlar kaldırılmışsa, DBCC CHECKIDENT çalıştırıldıktan sonra eklenen ilk satır kimlik olarak new_reseed_value kullanır. Tabloda satırlar varsa veya DELETE deyimi kullanılarak tüm satırlar kaldırılmışsa, eklenen sonraki satırda new_reseed_value + geçerli artış değeri kullanılır. Bir işlem bir satır eklerse ve daha sonra geri alınırsa, eklenen sonraki satır new_reseed_value + geçerli artım değerini satır silinmiş gibi kullanır. Tablo boş değilse, kimlik değerinin kimlik sütunundaki en büyük değerden küçük bir sayıya ayarlanması aşağıdaki koşullardan biriyle sonuçlanabilir:

- Kimlik sütununda BİrİnCİl ANAHTAR veya BENZERSİz kısıtlaması varsa, oluşturulan kimlik değeri mevcut değerlerle çakışacağından tabloya daha sonra ekleme işlemlerinde hata iletisi 2627 oluşturulur.

- BİrİnCİl ANAHTAR veya BENZERSİz kısıtlaması yoksa, daha sonra ekleme işlemleri yinelenen kimlik değerlerine neden olur.

Özel durum

Aşağıdaki tabloda, DBCC CHECKIDENT geçerli kimlik değerini otomatik olarak sıfırlamadığı durumlar listelenir ve değeri sıfırlamak için yöntemler sağlanır.

Koşul Yöntemleri sıfırlama
Geçerli kimlik değeri, tablodaki en büyük değerden daha büyük. Sütundaki geçerli en yüksek değeri belirlemek için DBCC CHECKIDENT (<table_name>, NORESEED) yürütür. Ardından, bu değeri bir DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) komutunda new_reseed_value olarak belirtin.

veya

new_reseed_value düşük bir değere ayarlanmış DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) yürütür ve ardından değeri düzeltmek için DBCC CHECKIDENT (<table_name>, RESEED)'yi çalıştırın.
Tüm satırlar tablodan silinir. yeni başlangıç değerine ayarlanmış new_reseed_value ile DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) yürütür.

Tohum değerini değiştirme

Tohum değeri, tabloya yüklenen ilk satır için bir kimlik sütununa eklenen değerdir. Sonraki tüm satırlar geçerli kimlik değerinin yanı sıra, geçerli kimlik değerinin tablo veya görünüm için oluşturulan son kimlik değeri olduğu artım değerini içerir.

Aşağıdaki görevler için DBCC CHECKIDENT kullanamazsınız:

  • Tablo veya görünüm oluşturulduğunda bir kimlik sütunu için belirtilen özgün tohum değerini değiştirin.

  • Tablo veya görünümde var olan satırları yeniden görüntüleyin.

Özgün tohum değerini değiştirmek ve var olan satırları yeniden görüntülemek için kimlik sütununu bırakın ve yeni tohum değerini belirterek yeniden oluşturun. Tablo veri içerdiğinde, kimlik numaraları belirtilen tohum ve artım değerleriyle var olan satırlara eklenir. Satırların güncelleştirildiği sıra garanti değildir.

Sonuç kümeleri

Kimlik sütunu içeren bir tablo için herhangi bir seçenek belirtip belirtmemenize bakılmaksızın, DBCC CHECKIDENT biri dışındaki tüm işlemler için aşağıdaki iletiyi döndürür. Bu işlem yeni bir tohum değeri belirtiyor.

Kimlik bilgileri denetleniyor: geçerli kimlik değeri '<geçerli kimlik değeri>', geçerli sütun değeri '<geçerli sütun değeri>'. DBCC yürütmesi tamamlandı. DBCC hata iletilerini yazdırdıysa sistem yöneticinize başvurun.

RESEED <new_reseed_value>kullanılarak yeni bir tohum değeri belirtmek için DBCC CHECKIDENT kullanıldığında aşağıdaki ileti döndürülür.

Kimlik bilgileri denetleniyor: geçerli kimlik değeri '<'>geçerli kimlik değeri. DBCC yürütmesi tamamlandı. DBCC hata iletilerini yazdırdıysa sistem yöneticinize başvurun.

İzinler

Çağıranın tabloyu içeren şemaya sahip olması veya sysadmin sabit sunucu rolünün, db_owner sabit veritabanı rolünün veya db_ddladmin sabit veritabanı rolünün üyesi olması gerekir.

Azure Synapse Analytics için db_owner izinleri gerekir.

Örnekler

A. Gerekirse geçerli kimlik değerini sıfırlayın

Aşağıdaki örnek, gerekirse AdventureWorks2022 veritabanında belirtilen tablonun geçerli kimlik değerini sıfırlar.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO

B. Geçerli kimlik değerini bildirme

Aşağıdaki örnek, AdventureWorks2022 veritabanında belirtilen tablodaki geçerli kimlik değerini raporlar ve yanlışsa kimlik değerini düzeltmez.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO

C. Geçerli kimlik değerini yeni bir değere zorlama

Aşağıdaki örnek, AddressType tablosundaki AddressTypeID sütunundaki geçerli kimlik değerini 10 değerine zorlar. Tabloda var olan satırlar olduğundan, eklenen sonraki satırda değer olarak 11 kullanılır. Sütun için tanımlanan yeni geçerli kimlik değeri artı 1 (sütunun artım değeridir).

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO

D. Boş bir tablodaki kimlik değerini sıfırlama

Aşağıdaki örnek, (1, 1) tablo kimliğini varsayar ve ErrorLog tablosundaki ErrorLogID sütunundaki geçerli kimlik değerini tablodan tüm kayıtları sildikten sonra 1 değerine zorlar. Tabloda var olan satır olmadığından, eklenen sonraki satırda değer olarak 1 kullanılır, yani yeni geçerli kimlik değeri, TRUNCATE sonrasında sütun için tanımlanan artım değerini eklemeden veya DELETE'in ardından artım değerini eklemeden.

USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO

Ayrıca bkz.