Megosztás a következőn keresztül:


DBCC CHECKCONSTRAINTS (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Ellenőrzi egy adott korlátozás integritását, vagy az aktuális adatbázis egy adott táblájának összes korlátozását.

Transact-SQL szintaxis konvenciói

Szintaxis

DBCC CHECKCONSTRAINTS
[
    (
    table_name | table_id | constraint_name | constraint_id
    )
]
    [ WITH
    [ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
    [ , ] [ NO_INFOMSGS ]
    ]

Érvek

| table_name | table_id | constraint_nameconstraint_id

Az ellenőrizni kívánt tábla vagy korlátozás. Ha table_name vagy table_id van megadva, a rendszer ellenőrzi a tábla összes engedélyezett korlátozását. Ha constraint_name vagy constraint_id van megadva, a rendszer csak ezt a kényszert ellenőrzi. Ha nincs megadva táblaazonosító vagy kényszerazonosító, a rendszer az aktuális adatbázis összes táblájára vonatkozó összes engedélyezett korlátozást ellenőrzi.

A kényszernév egyedileg azonosítja azt a táblát, amelyhez tartozik. További információ: Adatbázis-azonosítók.

VAL

Engedélyezi a beállítások megadását.

  • ALL_CONSTRAINTS

    Ellenőrzi a tábla összes engedélyezett és letiltott korlátozását, ha a tábla neve meg van adva, vagy ha az összes tábla be van jelölve; ellenkező esetben csak az engedélyezett kényszert ellenőrzi. ALL_CONSTRAINTS nincs hatása a kényszernév megadásakor.

  • ALL_ERRORMSGS

    Visszaadja az összes olyan sort, amely megsérti az ellenőrzött tábla korlátait. Az alapértelmezett érték az első 200 sor.

  • NO_INFOMSGS

    Letiltja az összes tájékoztató üzenetet.

Megjegyzések

DBCC CHECKCONSTRAINTS létrehoz és végrehajt egy lekérdezést egy táblán lévő összes IDEGENKULCS-korlátozáshoz és CHECK-kényszerhez.

Egy idegenkulcs-lekérdezés például a következő formában történik:

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;

A lekérdezési adatokat egy ideiglenes táblában tárolja a rendszer. Az összes kért tábla vagy korlátozás ellenőrzése után a rendszer visszaadja az eredményhalmazt.

DBCC CHECKCONSTRAINTS ellenőrzi a FOREIGN KEY és a CHECK korlátozás integritását, de nem ellenőrzi a tábla lemezen lévő adatstruktúráinak integritását. Ezek az adatszerkezet-ellenőrzések DBCC CHECKDB és DBCC CHECKTABLEhasználatával végezhetők el.

: SQL Server 2016 (13.x) és újabb verziók

Ha table_name vagy table_id van megadva, és engedélyezve van a rendszer verziószámozásához, DBCC CHECKCONSTRAINTS a megadott táblán is elvégzi az időbeli adatkonzisztencia-ellenőrzéseket. Ha nincs megadva NO_INFOMSGS, ez a parancs egy külön sorban adja vissza a kimenetben lévő összes konzisztencia-szabálysértést. A kimenet formátuma a következő lesz ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) AND <what is wrong with temporal table record>: .

Ellenőriz További információ a kimenetben, ha az ellenőrzés sikertelen volt
PeriodEndColumn >= PeriodStartColumn (aktuális) [sys_end] = '{0}' ÉS MAX(DATETIME2) = '9999-12-31 23:59:59.99999'
PeriodEndColumn >= PeriodStartColumn (aktuális, előzmények) [sys_start] = '{0}' ÉS [sys_end] = '{1}'
PeriodStartColumn < current_utc_time (aktuális) [sys_start] = '{0}' ÉS SYSUTCTIME
PeriodEndColumn < current_utc_time (előzmények) [sys_end] = '{0}' ÉS SYSUTCTIME
Átfedések (sys_start1, sys_end1), (sys_start2, sys_end2) két egymást átfedő rekordhoz.

Ha kétnál több egymást átfedő rekord van, a kimenet több sorból áll, amelyek mindegyike átfedéseket mutat.

Nem adhat meg constraint_name vagy constraint_id csak az időbeli konzisztencia-ellenőrzések futtatásához.

Eredményhalmazok

DBCC CHECKCONSTRAINTS a következő oszlopokkal rendelkező sorkészletet adja vissza.

Oszlop neve Adattípus Leírás
Tábla neve varchar A tábla neve.
Kényszer neve varchar A megsértett kényszer neve.
Hol varchar A kényszert megsértő sorokat vagy sorokat azonosító oszlopérték-hozzárendelések.

Az oszlopban lévő érték használható egy SELECT utasítás WHERE záradékában, amely olyan sorokat kérdez le, amelyek megsértik a kényszert.

DBCC CHECKCONSTRAINTS nem garantált, hogy korlátozási szabálysértéseket. Ha egyetlen sor több korlátozást is megsért, csak az első szabálysértés WHERE záradéka szerepel a listán. Ha egy másik sor nem létezik ugyanazzal az értékkombinációval, amely a szabálysértést okozza, és az első szabálysértésnél ez a szabálysértés szerepel, az értékek kombinációja hiányzik a visszaadott eredményhalmazból. Előfordulhat, hogy többször kell futtatnia DBCC CHECKCONSTRAINTS, és ki kell javítania a problémákat, mielőtt az adatbázisban minden korlátozási szabálysértést megtalálna.

Engedélyek

A sysadmin rögzített kiszolgálói szerepkörben vagy a db_owner rögzített adatbázis-szerepkörben való tagság szükséges.

Példák

Egy. Tábla ellenőrzése

Az alábbi példa a Table1 adatbázisban AdventureWorks2025 tábla korlátozási integritását ellenőrzi.

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. Adott korlátozás ellenőrzése

Az alábbi példa a CK_ProductCostHistory_EndDate kényszer integritását ellenőrzi.

USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO

C. Az összes tábla összes engedélyezett és letiltott korlátozásának ellenőrzése

Az alábbi példa az aktuális adatbázis összes tábláján ellenőrzi az összes engedélyezett és letiltott korlátozás integritását.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO

Lásd még: