DBCC CHECKIDENT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'de Azure Synapse AnalyticsSQL veritabanı

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.

Bu makale ve sözdizimiIDENTITY, SQL Database Engine'in farklı platformlarında farklılık gösterir. Microsoft Fabric Data Warehouse için, sürüm açılır menüsünden Fabric Data Warehouse seçeneğini seçin.

Transact-SQL söz dizimi kuralları

Sözdizimi

Syntax for SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, SQL database in Fabric:

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ı. Belirttiğiniz tabloda bir kimlik sütunu bulunmalıdır. Tablo adları tanımlayıcıları için kurallara uymalıdır. İki veya üç bölümlü isimler için sınırlayıcılar kullanın, örneğin Person.AddressType veya [Person].[AddressType].

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.

BİLGİ_MSJSIZ

Tüm bilgilendirme iletilerini gizler.

Açıklamalar

Mevcut kimlik değerine yapılan özel düzeltmeler DBCC CHECKIDENT , parametre özelliklerine bağlıdır.

DBCC CHECKIDENT komut 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. Eğer iki değer aynı değilse, kimlik değerini sıfırlayın ki potansiyel hatalar veya değerler dizisinde boşluklar oluşmasın.
DBCC CHECKIDENT (<table_name>)

veya

DBCC CHECKIDENT (<table_name>, RESEED)
Bir tablo için mevcut kimlik değeri, kimlik sütununda depolanan maksimum kimlik değerinden küçükse, DBCC CHECKIDENT kimlik sütunundaki maksimum değeri kullanarak sıfırlayın. 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şturulduğundan beri tabloya satır eklenmediyse veya tüm satırlar bu ifadeyle TRUNCATE TABLE kaldırıldıysa, çalıştırdıktan DBCC CHECKIDENT sonra eklenen ilk satır kimlik olarak kullanılır new_reseed_value . Tabloda satırlar varsa veya tüm satırlar bu DELETE ifadeyle kaldırılırsa, eklenen sonraki satır + mevcut artış değerini kullanır new_reseed_value . Bir işlem satır ekliyorsa ve daha sonra geri çekilirse, eklenen sonraki satır new_reseed_value + mevcut artış değerini kullanır, sanki satır silinmiş gibi. 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 bir PRIMARY KEY veya UNIQUE kısıtlama varsa, oluşturulan kimlik değeri mevcut değerlerle çeliştiği için sonraki ekleme işlemlerinde hata mesajı 2627 oluşturulur.

- Bir PRIMARY KEY veya UNIQUE kısıtlama yoksa, sonraki ekleme işlemleri kimlik değerlerinin tekrarlanmasına yol açar.

Ö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 komutunda DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) olarak belirtin.

veya

DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) düşük bir değere ayarlanmış 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ış DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) ile 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.

DBCC CHECKIDENTkullanılarak yeni bir tohum değeri belirtmek için RESEED <new_reseed_value> 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 veritabanındaki belirtilen tablo için mevcut 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, veritabanında belirtilen tablo için mevcut kimlik değerini bildirir ve yanlış olan 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, tablodaki sütunun AddressType mevcut kimlik değerini AddressTypeID 10 değerine zorlamaktadır. Tabloda mevcut satırlar olduğu için, eklenen sonraki satır değer olarak 11 kullanır. Sütun artı 1 için tanımlanan yeni güncel kimlik değeri, sütunun artış 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, tablodaki (1, 1) tüm kayıtları sildikten sonra tablodaki sütunun ErrorLog mevcut kimlik değerini ErrorLogID 1 değerine zorlar. Tabloda mevcut satır olmadığından, eklenen sonraki satır değer olarak 1 kullanır. TRUNCATE'den sonra sütun için tanımlanan artış değeri eklemeden veya artım değeri eklenmeden DELETEyeni mevcut kimlik değeri.

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

Şunlar için geçerlidir:Microsoft Fabric'te Ambar

Bir tablonun kimlik değerini Fabric Data Warehouse'de yeniden tohumlar. Açık değerler girdikten sonra SET IDENTITY_INSERT kimlik aralıklarını yeniden hizalamak ve gelecekteki otomatik olarak oluşturulan değerlerle çatışmaları önlemek için kullanınDBCC CHECKIDENT.

Bu makale ve sözdizimiIDENTITY, SQL Database Engine'in farklı platformlarında farklılık gösterir.

Transact-SQL söz dizimi kuralları

Sözdizimi

DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )

Bağımsız değişken

table_name

Kimlik değerinin yeniden tohumlanacağı tablonun adı. Tablo bir kimlik sütunu içermelidir. Tablo adları şema adını içerebilir, örneğin 'dbo.DimCustomer' veya '[dbo].[DimCustomer]'.

RESEED

Anahtar kelime RESEED isteğe bağlıdır, ancak DBCC CHECKIDENT her zaman yeniden tohumlama işlemini gerçekleştirir. Seçeneği dahil etmek veya çıkarmak aynı sonuçları verir.

Anahtar kelime, RESEED Database Engine'e tüm kullanılan ve ayrılmış kimlik aralıklarını taramasını ve mevcut değerlerle çatışmaları önlemek için bir sonraki kimlik değerini belirlemesini emreder. Fabric Data Warehouse'de, RESEED doğru bir sonraki değeri belirlemek için tüm dağıtık hesaplama düğümlerinde menzile duyarlı bir tarama yapar.

Açıklamalar

  • Fabric Data Warehouse'de destekleyen tek argüman DBCC CHECKIDENTRESEED her zaman uygulanan opsiyondur. Sistem, mevcut verilere dayanarak doğru bir sonraki kimlik değer aralıklarını otomatik olarak belirler. Özel bir yeniden tohumlama değeri belirtemezsiniz.
  • Her zaman açık değerleri eklemek için kullandıktan IDENTITY_INSERT sonra çalıştırınDBCC CHECKIDENT. Bu işlem, gelecekteki otomatik olarak oluşturulan değerlerin elle eklenen değerlerle çarpışmamasını sağlar.
  • Fabric Data Warehouse'de özel new_reseed_value bir özellik belirtmek desteklenmiyor. Bir değer vermeye çalışıldığında aşağıdaki hata döner: Specifying a custom seed in Fabric Data Warehouse is not supported.
  • DBCC CHECKIDENT eşzamanlı DML ve DDL işlemlerini engelleyebilen kilitler edinir. Kesintiyi en aza indirmek için, diğer süreçler tabloyu aktif olarak kullanmadığında komutu izole şekilde çalıştırın.

İzinler

Masaya sahip olmalısın ya da masada izin almalısın ALTER .

Örnekler

A. Sentinel değerleri eklendikten sonra yeniden tohumlama

Boyut tablosunda sentinel değerleri doldurulduktan SET IDENTITY_INSERTsonra, gelecekte otomatik olarak oluşturulan değerlerin elle eklenen değerlerle çarpışmasını önlemek için kimlik sütununu yeniden tohumlayın.

-- Insert sentinel values
SET IDENTITY_INSERT dbo.DimCustomer ON;

INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName)
VALUES (-1, 'Unknown'),
       (-2, 'Not Applicable');

SET IDENTITY_INSERT dbo.DimCustomer OFF;

-- Reseed to realign future identity values
DBCC CHECKIDENT('dbo.DimCustomer', RESEED);

B. Toplu göç sonrası yeniden tohumlama

Geçmiş verileri açık kimlik değerleriyle aktardıktan sonra, yeni satırların taşınan verilerle örtüşmeyen değerleri almasını sağlamak için tabloyu yeniden tohumlayın.

-- After migrating data with IDENTITY_INSERT
DBCC CHECKIDENT('dbo.DimProduct', RESEED);

-- Future inserts receive auto-generated values beyond the migrated range
INSERT INTO dbo.DimProduct (ProductName, Category)
VALUES ('New Widget', 'Hardware');

C. KOPYA ETMEKTEN sonra yeniden tohum IDENTITY_INSERT

Veri yüklendikten COPY INTO sonra, while IDENTITY_INSERT is ON, kimlik sütununu yeniden tohumla. COPY INTO Seçenekler, için IDENTITY_INSERTherhangi bir oturum seviyesi ayarı geçersiz kalır.

COPY INTO dbo.DimStore (StoreKey 1, StoreName 2, Region 3)
FROM 'https://storage.blob.core.windows.net/migration/dimstore.csv'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

-- Reseed after bulk load
DBCC CHECKIDENT('dbo.DimStore', RESEED);

D. RESSEED anahtar kelimesi olmadan yeniden tohum

Anahtar kelime RESEED isteğe bağlıdır, ancak DBCC CHECKIDENT her zaman yeniden tohumlama işlemini gerçekleştirir. Seçeneği dahil etmek veya çıkarmak aynı sonuçları verir.

-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');

-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);