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.