Preskočiť na obsah
Skript

Nedôveryhodné a vypnuté constraints

FOREIGN KEY a CHECK constraints, ktoré sú vypnuté alebo „not trusted“ – typicky po importe s WITH NOCHECK.

nedoveryhodne-a-vypnute-constraints.sql 20 riadkov · T-SQL
Parametre skriptu doplň a kopíruj hotový skript
/* DeadlockCafe | Nedôveryhodné a vypnuté constraints
   Účel:  FOREIGN KEY a CHECK constraints, ktoré sú vypnuté alebo „not trusted“ – typicky po importe s WITH NOCHECK.
   Režim: READ ONLY | SQL Server 2016 – 2022, on-premises
*/
SET NOCOUNT ON;

SELECT SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name,
       fk.name AS constraint_name, 'FOREIGN KEY' AS constraint_type,
       fk.is_disabled, fk.is_not_trusted
FROM sys.foreign_keys AS fk
JOIN sys.tables AS t ON t.object_id=fk.parent_object_id
WHERE fk.is_disabled=1 OR fk.is_not_trusted=1
UNION ALL
SELECT SCHEMA_NAME(t.schema_id), t.name,
       ck.name, 'CHECK', ck.is_disabled, ck.is_not_trusted
FROM sys.check_constraints AS ck
JOIN sys.tables AS t ON t.object_id=ck.parent_object_id
WHERE ck.is_disabled=1 OR ck.is_not_trusted=1
ORDER BY schema_name,table_name,constraint_name;
## Kedy použiť

Po importe dát, migrácii schémy alebo po použití `WITH NOCHECK`.

## Ako čítať výsledok

`is_not_trusted = 1` znamená, že optimalizátor sa na constraint nemôže spoľahnúť (napr. pri join elimination). `is_disabled = 1` = constraint sa vôbec nekontroluje.

> [!WARNING]
> Oprava `ALTER TABLE … WITH CHECK CHECK CONSTRAINT …` prečíta celú tabuľku, drží zámky a zlyhá na nekonzistentných dátach – nie je súčasťou skriptu, plánuj ju ako zmenu.

**Oprávnenia:** Viditeľnosť metadát tabuliek a constraints. Spúšťa sa v cieľovej databáze.  
**Režim:** READ ONLY · **Verzia:** SQL Server 2016 – 2022