Hvis du har brug for at returnere en liste over alle ikke-pålidelige CHECK
begrænsninger i en SQL Server-database, kan du køre T-SQL-koden nedenfor.
Med "untrusted" henviser jeg til de begrænsninger, der har deres is_not_trusted
flag sat til 1
.
Eksempel 1 – Returner kun upålidelige CHECK-begrænsninger
Denne forespørgsel returnerer kun den ikke-pålidelige CHECK
begrænsninger i den aktuelle database.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, definition FROM sys.check_constraints WHERE is_not_trusted = 1;
Resultat:
+----------------+-----------------+---------------+-------------------------------+ | Table | Constraint | is_disabled | definition | |----------------+-----------------+---------------+-------------------------------| | ConstraintTest | chkPrice | 0 | ([Price]>(0)) | | ConstraintTest | chkValidEndDate | 1 | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | 1 | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+---------------+-------------------------------+
Denne forespørgsel returnerer begrænsningsnavnet, navnet på tabellen, den er anvendt på, og begrænsningens definition.
Det returnerer også is_disabled
kolonne. Dette fortæller os, om begrænsningen i øjeblikket er aktiveret eller deaktiveret. Dette kan være vigtigt at vide, fordi en begrænsning kan være aktiveret, men ikke tillid til på samme tid.
Den forespørger på sys.check_constraints
systemvisning. Vi ved, at det kun returnerer upålidelige begrænsninger, fordi WHERE
klausul specificerer kun rækker, der har is_not_trusted
kolonne sat til 1
.
Hvis du vil returnere alle betroede CHECK
begrænsninger, skal du blot ændre 1
til 0
.
Eksempel 2 – Returner tillidsstatus
Her er det igen, men denne gang skifter jeg definition
kolonne med is_not_trusted
kolonne:
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;
Resultat:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Det er sandsynligvis overflødigt at inkludere koden is_not_trusted
kolonne, men det hjælper i det mindste at gentage det faktum, at en aktiveret begrænsning stadig ikke kan stole på.
Eksempel 3 – Returner alle CHECK-begrænsninger
Følgende forespørgsel returnerer alle CHECK
begrænsninger for den aktuelle database (ikke kun de ikke-pålidelige):
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
Resultat:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
For en detaljeret diskussion (og eksempler) af is_not_trusted
flag, se Hvad du bør vide om MED NOCHECK, når du aktiverer en CHECK-begrænsning i SQL Server.