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.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Geçerli veritabanında belirtilen bir tablodaki belirtilen kısıtlamanın veya tüm kısıtlamaların bütünlüğünü denetler.
Transact-SQL söz dizimi kuralları
Sözdizimi
DBCC CHECKCONSTRAINTS
[
(
table_name | table_id | constraint_name | constraint_id
)
]
[ WITH
[ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
[ , ] [ NO_INFOMSGS ]
]
Bağımsız değişken
table_name | table_id | constraint_name | constraint_id
Denetlenecek tablo veya kısıtlama. table_name veya table_id belirtildiğinde, bu tablodaki tüm etkin kısıtlamalar denetlenır. constraint_name veya constraint_id belirtildiğinde, yalnızca bu kısıtlama denetlenebilir. Tablo tanımlayıcısı veya kısıtlama tanımlayıcısı belirtilmezse, geçerli veritabanındaki tüm tablolarda etkinleştirilen tüm kısıtlamalar denetlenır.
Kısıtlama adı, ait olduğu tabloyu benzersiz olarak tanımlar. Daha fazla bilgi için bkz. Veritabanı Tanımlayıcıları.
İLE
Seçeneklerin belirtilmesine olanak tanır.
ALL_CONSTRAINTS
Tablo adı belirtilmişse veya tüm tablolar işaretliyse tablodaki tüm etkin ve devre dışı kısıtlamaları denetler; aksi takdirde, yalnızca etkin kısıtlamayı denetler. bir kısıtlama adı belirtildiğinde
ALL_CONSTRAINTS
hiçbir etkisi olmaz.ALL_ERRORMSGS
denetlenen tablodaki kısıtlamaları ihlal eden tüm satırları döndürür. Varsayılan değer ilk 200 satırdır.
NO_INFOMSGS
Tüm bilgilendirme iletilerini gizler.
Açıklamalar
DBCC CHECKCONSTRAINTS
tablodaki tüm FOREIGN KEY kısıtlamaları ve CHECK kısıtlamaları için bir sorgu oluşturur ve yürütür.
Örneğin, yabancı anahtar sorgusu aşağıdaki biçimdedir:
SELECT <columns>
FROM <table_being_checked> LEFT JOIN <referenced_table>
ON <table_being_checked.fkey1> = <referenced_table.pkey1>
AND <table_being_checked.fkey2> = <referenced_table.pkey2>
WHERE <table_being_checked.fkey1> IS NOT NULL
AND <referenced_table.pkey1> IS NULL
AND <table_being_checked.fkey2> IS NOT NULL
AND <referenced_table.pkey2> IS NULL;
Sorgu verileri geçici bir tabloda depolanır. İstenen tüm tablolar veya kısıtlamalar denetlendikten sonra sonuç kümesi döndürülür.
DBCC CHECKCONSTRAINTS
FOREIGN KEY ve CHECK kısıtlamalarının bütünlüğünü denetler, ancak tablonun disk üzerindeki veri yapılarının bütünlüğünü denetlemez. Bu veri yapısı denetimleri, DBCC CHECKDB ve DBCC CHECKTABLEkullanılarak gerçekleştirilebilir.
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler
table_name veya table_id belirtilirse ve sistem sürümü oluşturma için etkinleştirilirse, DBCC CHECKCONSTRAINTS
belirtilen tabloda zamansal veri tutarlılığı denetimleri de gerçekleştirir.
NO_INFOMSGS belirtilmediğinde, bu komut çıkıştaki her tutarlılık ihlalini ayrı bir satırda döndürür. Çıkışın biçimi ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...)
VE <what is wrong with temporal table record>
olacaktır.
Çek | Denetim başarısız olursa çıkışta ek bilgiler |
---|---|
PeriodEndColumn >= PeriodStartColumn (geçerli) | [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999' |
PeriodEndColumn >= PeriodStartColumn (geçerli, geçmiş) | [sys_start] = '{0}' AND [sys_end] = '{1}' |
PeriodStartColumn < current_utc_time (geçerli) | [sys_start] = '{0}' AND SYSUTCTIME |
PeriodEndColumn < current_utc_time (geçmiş) | [sys_end] = '{0}' AND SYSUTCTIME |
Çakışıyor | (sys_start1, sys_end1), (sys_start2, sys_end2) çakışan iki kayıt için. İkiden fazla çakışan kayıt varsa, çıkışta her biri bir çift örtüşme gösteren birden çok satır olur. |
Yalnızca zamansal tutarlılık denetimlerini çalıştırmak için constraint_name
veya constraint_id
belirtemezsiniz.
Sonuç kümeleri
DBCC CHECKCONSTRAINTS
aşağıdaki sütunları içeren bir satır kümesi döndürür.
Sütun adı | Veri tipi | Açıklama |
---|---|---|
Tablo Adı | varchar | Tablonun adı. |
Kısıtlama Adı | varchar | İhlal edilen kısıtlamanın adı. |
Nerede | varchar | Kısıtlamayı ihlal eden satır veya satırları tanımlayan sütun değeri atamaları. Bu sütundaki değer, kısıtlamayı ihlal eden satırlar için sorgulayan SELECT deyiminin WHERE yan tümcesinde kullanılabilir. |
DBCC CHECKCONSTRAINTS
tüm kısıtlama ihlallerini bulma garantisi yoktur. Tek bir satır birden çok kısıtlamayı ihlal ederse, yalnızca ilk ihlalin WHERE
yan tümcesi listelenir. İhlali oluşturan değerlerin birleşimiyle başka bir satır yoksa ve ilk ihlal bulunduğunda bu ihlale sahip değilse, döndürülen sonuç kümesinde değerlerin birleşimi eksik olur. Veritabanındaki tüm kısıtlama ihlallerini bulmadan önce DBCC CHECKCONSTRAINTS
çalıştırmanız ve sorunları birkaç kez düzeltmeniz gerekebilir.
İzinler
sysadmin sabit sunucu rolüne veya db_owner sabit veritabanı rolüne üyelik gerektirir.
Örnekler
A. Tabloyu denetleme
Aşağıdaki örnek, AdventureWorks2022
veritabanındaki tablo Table1
kısıtlama bütünlüğünü denetler.
USE AdventureWorks2022;
GO
CREATE TABLE Table1 (Col1 INT, Col2 CHAR(30));
GO
INSERT INTO Table1 VALUES (100, 'Hello');
GO
ALTER TABLE Table1 WITH NOCHECK ADD CONSTRAINT chkTab1 CHECK (Col1 > 100);
GO
DBCC CHECKCONSTRAINTS (Table1);
GO
B. Belirli bir kısıtlamayı denetleme
Aşağıdaki örnek, CK_ProductCostHistory_EndDate
kısıtlamasının bütünlüğünü denetler.
USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO
C. Tüm tablolarda tüm etkin ve devre dışı kısıtlamaları denetleme
Aşağıdaki örnek, geçerli veritabanındaki tüm tablolarda etkinleştirilen ve devre dışı bırakılan tüm kısıtlamaların bütünlüğünü denetler.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO
Ayrıca bkz.
- DBCC CHECKDB (Transact-SQL)
- DBCC CHECKTABLE (Transact-SQL)
- DBCC (Transact-SQL)