Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
İlgili içerik
Ş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 CHECKIDENTRESEEDher 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_INSERTsonra ç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_valuebir ö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 CHECKIDENTeş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);