sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man returnerar alla inaktiverade CHECK-begränsningar i SQL Server (T-SQL-exempel)

Om du behöver returnera en lista över alla CHECK begränsningar som har inaktiverats i en SQL Server-databas kan du köra T-SQL-koden nedan.

Exempel 1 – Endast retur inaktiverade KONTROLLERA begränsningar

Den här frågan returnerar endast den inaktiverade CHECK begränsningar i den aktuella databasen. Den returnerar begränsningsnamnet, namnet på tabellen som den tillämpas på och begränsningens definition.

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  definition
FROM sys.check_constraints
WHERE is_disabled = 1;

Resultat:

+----------------+-----------------+-------------------------------+
| Table          | Constraint      | definition                    |
|----------------+-----------------+-------------------------------|
| ConstraintTest | chkValidEndDate | ([EndDate]>=[StartDate])      |
| Occupation     | chkJobTitle     | ([JobTitle]<>'Digital Nomad') |
+----------------+-----------------+-------------------------------+

Detta frågar efter sys.check_constraints systemvy. Vi vet att det bara returnerar inaktiverade begränsningar eftersom WHERE sats anger endast rader som har is_disabled kolumn inställd på 1 .

Om du vill återställa alla aktiverade CHECK begränsningar, ändra helt enkelt 1 till 0 .

Exempel 2 – Returnera alla CHECK-begränsningar

Följande fråga returnerar alla CHECK begränsningar för den aktuella databasen (inte bara de inaktiverade). Den här gången returnerar jag is_disabled kolumn för att visa var den föregående frågan fick sitt värde från:

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             | 0                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Jag har också inkluderat is_not_trusted kolumnen i den här frågan. Det är klokt att vara uppmärksam på detta värde, eftersom en begränsning kan förbli opålitlig även efter att den har återaktiverats. För en detaljerad diskussion (och exempel) av denna flagga, se Vad du bör veta om MED NOCHECK när du aktiverar en CHECK-begränsning i SQL Server.


  1. Felsök att få slut på arbetstrådar

  2. Varför inga fönsterfunktioner i where-satser?

  3. Filtrera på Output-sats sql

  4. Hur man släpper en tabell i SQL