sql >> Databasteknik >  >> RDS >> Sqlserver

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

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

Med "untrusted" syftar jag på de begränsningar som har sin is_not_trusted flaggan inställd på 1 .

Exempel 1 – Returnera endast otillförlitliga CHECK-begränsningar

Den här frågan returnerar endast den opålitliga CHECK begränsningar i den aktuella databasen.

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') |
+----------------+-----------------+---------------+-------------------------------+

Den här frågan returnerar begränsningsnamnet, namnet på tabellen som den tillämpas på och begränsningens definition.

Den returnerar också is_disabled kolumn. Detta talar om för oss om begränsningen för närvarande är aktiverad eller inaktiverad. Detta kan vara viktigt att veta, eftersom en begränsning kan vara aktiverad men samtidigt opålitlig.

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

Om du vill returnera alla betrodda CHECK begränsningar, ändra helt enkelt 1 till 0 .

Exempel 2 – Returnera förtroendestatus

Här är den igen, men den här gången byter jag definition kolumnen med is_not_trusted kolumn:

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 är förmodligen överflödigt att inkludera is_not_trusted kolumn, men det hjälper åtminstone att upprepa det faktum att en aktiverad begränsning fortfarande kan vara obetrodd.

Exempel 3 – Returnera alla CHECK-begränsningar

Följande fråga returnerar alla CHECK begränsningar för den aktuella databasen (inte bara de otillförlitliga):

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                |
+----------------+-----------------+---------------+------------------+

För en detaljerad diskussion (och exempel) av is_not_trusted flagga, se Vad du bör veta om MED NOCHECK när du aktiverar en CHECK-begränsning i SQL Server.


  1. Kan inte ansluta till MySQL från Java:NullPointerException inuti MySQL-drivrutinanslutningslogiken

  2. MySQL diakritisk okänslig sökning (spanska accenter)

  3. Hur visar man Oracle-schemastorlek med SQL-fråga?

  4. MySQL DELETE FROM med subquery som villkor