Pokud potřebujete vrátit seznam všech nedůvěryhodných CHECK
omezení v databázi SQL Server, můžete spustit kód T-SQL níže.
Termínem „nedůvěryhodný“ mám na mysli ta omezení, která mají svá is_not_trusted
příznak nastaven na 1
.
Příklad 1 – Vrácení pouze nedůvěryhodných CHECK omezení
Tento dotaz vrací pouze nedůvěryhodný CHECK
omezení v aktuální databázi.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, definition FROM sys.check_constraints WHERE is_not_trusted = 1;
Výsledek:
+----------------+-----------------+---------------+-------------------------------+ | Table | Constraint | is_disabled | definition | |----------------+-----------------+---------------+-------------------------------| | ConstraintTest | chkPrice | 0 | ([Price]>(0)) | | ConstraintTest | chkValidEndDate | 1 | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | 1 | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+---------------+-------------------------------+
Tento dotaz vrátí název omezení, název tabulky, na kterou se vztahuje, a definici omezení.
Vrátí také is_disabled
sloupec. To nám říká, zda je omezení aktuálně povoleno nebo zakázáno. To může být důležité vědět, protože omezení může být povoleno, ale zároveň nedůvěryhodné.
Dotazuje se na sys.check_constraints
systémový pohled. Víme, že vrací pouze nedůvěryhodná omezení, protože WHERE
klauzule specifikuje pouze řádky, které mají is_not_trusted
sloupec nastaven na 1
.
Pokud chcete vrátit všechny důvěryhodné CHECK
omezení, jednoduše změňte 1
na 0
.
Příklad 2 – Návrat stavu důvěryhodnosti
Tady je to znovu, ale tentokrát jsem vyměnil definition
sloupec s is_not_trusted
sloupec:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints WHERE is_not_trusted = 1;
Výsledek:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Pravděpodobně je zbytečné uvádět is_not_trusted
sloupec, ale alespoň to pomáhá zopakovat skutečnost, že povolené omezení může být stále nedůvěryhodné.
Příklad 3 – Vrátit všechna omezení KONTROLY
Následující dotaz vrátí vše CHECK
omezení pro aktuální databázi (nejen ty nedůvěryhodné):
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
Výsledek:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Pro podrobnou diskusi (a příklady) is_not_trusted
příznak, viz Co byste měli vědět o WITH NOCHECK při povolení omezení CHECK v SQL Server.