sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan returneres alle upålidelige CHECK-begrænsninger i SQL Server (T-SQL-eksempel)

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.


  1. SQL Server:det maksimale antal rækker i tabellen

  2. Hvordan fungerer indeksering

  3. Fjerner MySQL 5.7 fuldstændigt

  4. Hvordan rettes Ora-01427 enkeltrækkes underforespørgsel returnerer mere end én række i udvalgte?