Aracılığıyla paylaş


DBCC CHECKCONSTRAINTS (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure 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.