Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-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_CONSTRAINTSnincs 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