dbcc CHECKCONSTRAINTS (Transact-sql)
Belirtilen sınırlama veya geçerli veritabanında belirtilen tablo tüm kısıtlamaları bütünlüğünü denetler.
Transact-SQL Sözdizim 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şkenler
table_name | table_id | constraint_name | constraint_id
Tablo veya denetlenecek kısıtlaması değildir. Ne zaman table_nameveya table_idolduğu belirtilen, bu tablonun tüm etkin kısıtlamaları iade. Ne zaman constraint_nameveya constraint_idolduğu belirtilen bu kısıtlama yalnızca teslim. Ne bir tablo tanıtıcısı, ne de bir sınırlama tanımlayıcısı belirtilirse, geçerli veritabanındaki tüm tabloları tüm etkin kısıtlamaları denetlenir.Bir kısıtlama adı, ait olduğu tablonun benzersiz olarak tanımlar. Daha fazla bilgi için, bkz. Veritabanı tanımlayıcıları.
İLE
Belirtilmesi için seçenekler sağlarALL_CONSTRAINTS
Tüm etkin ve tablo adı belirtilirse veya tüm tabloları işaretli ise tablo kısıtlamaları devre dışı denetler; Aksi takdirde, yalnızca etkin kısıtlamayı denetler. Bir kısıtlama adı belirtildiğinde ALL_CONSTRAINTS etkisi yoktur.ALL_ERRORMSGS
Seçili tablo kısıtlamaları ihlal tüm satırları döndürür. İlk 200 satır varsayılandır.NO_INFOMSGS
Tüm bilgi iletilerini kapatır.
Açıklamalar
dbcc CHECKCONSTRAINTS yapıları ve tüm FOREIGN key kısıtlamaları ve check kısıtlamaları bir tablo için bir sorgu yürütür.
Örneğin, bir yabancı anahtar sorgu aşağıdaki biçimi şöyledir:
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
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 tabloda depolanır. Sonuçta istenen tablo veya kısıtlamalar kontrol, sonuç kümesi döndürülür.
dbcc CHECKCONSTRAINTS FOREIGN key ve check kısıtlamaları bütünlüğünü denetler ama disk üzerinde veri yapılarını bir tablonun bütünlüğünü denetlemez. Bu veri yapısı denetimleri kullanarak gerçekleştirilebilir dbcc checkdb ve dbcc checktable.
Sonuç Kümeleri
dbcc CHECKCONSTRAINTS aşağıdaki sütunları olan bir satır kümesi döndürür.
Sütun adı |
Veri türü |
Açıklama |
---|---|---|
Table Name |
varchar |
Tablonun adı. |
Constraint Name |
varchar |
İhlal kısıtlamanın adı. |
Where |
varchar |
Satır veya satırları kısıtlamayı ihlal tanımlamak sütun değer atamaları. Bu sütundaki değer, bir select deyimi kısıtlamayı ihlal eden satırları sorgulanırken, where yan tümcesinde kullanılabilir. |
İzinler
sysadmin sabit sunucu rolüne veya db_owner sabit veritabanı rolüne üye olmayı gerektirir.
Örnekler
A.Bir tablo denetimi
Aşağıdaki örnek tablo kısıtlaması bütünlüğünü denetler Table1de AdventureWorksveritabanı.
USE AdventureWorks2012;
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ıtlama denetleme
Aşağıdaki örnek bütünlüğünü denetler CK_ProductCostHistory_EndDatekısıtlama.
USE AdventureWorks2012;
GO
DBCC CHECKCONSTRAINTS ("Production.CK_ProductCostHistory_EndDate");
GO
C.Tüm denetimi etkinleştirilmiş ve tüm tabloları üzerinde kısıtlamalar devre dışı
Aşağıdaki örnek, tüm bütünlüğünü etkin ve geçerli veritabanındaki tüm tabloları üzerinde kısıtlamalar devre dışı denetler.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO