Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zwrócić wszystkie niezaufane ograniczenia kontrolne w programie SQL Server (przykład T-SQL)

Jeśli chcesz zwrócić listę wszystkich niezaufanych CHECK ograniczenia w bazie danych SQL Server, możesz uruchomić poniższy kod T-SQL.

Przez „niezaufany” mam na myśli te ograniczenia, które mają swój is_not_trusted flaga ustawiona na 1 .

Przykład 1 – Zwróć tylko niezaufane ograniczenia kontrolne

To zapytanie zwraca tylko niezaufany CHECK ograniczenia w bieżącej bazie danych.

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

Wynik:

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

To zapytanie zwraca nazwę ograniczenia, nazwę tabeli, do której zostało zastosowane, oraz definicję ograniczenia.

Zwraca również is_disabled kolumna. To mówi nam, czy ograniczenie jest aktualnie włączone, czy wyłączone. Może to być ważne, ponieważ ograniczenie może być włączone, ale jednocześnie niezaufane.

Wysyła zapytanie do sys.check_constraints widok systemu. Wiemy, że zwraca tylko niezaufane ograniczenia, ponieważ WHERE klauzula określa tylko wiersze, które mają is_not_trusted kolumna ustawiona na 1 .

Jeśli chcesz zwrócić wszystkie zaufane CHECK ograniczenia, po prostu zmień 1 do 0 .

Przykład 2 – Zwróć status zaufania

Tutaj jest znowu, ale tym razem zamieniam definition kolumna z is_not_trusted kolumna:

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;

Wynik:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 1                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Prawdopodobnie zbyteczne jest uwzględnienie is_not_trusted kolumna, ale przynajmniej pomaga powtórzyć fakt, że włączone ograniczenie nadal może być niezaufane.

Przykład 3 — Zwróć wszystkie ograniczenia kontrolne

Następujące zapytanie zwraca wszystkie CHECK ograniczenia dla bieżącej bazy danych (nie tylko niezaufanych):

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints;

Wynik:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 1                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Szczegółowe omówienie (i przykłady) is_not_trusted flagę, zobacz Co powinieneś wiedzieć o funkcji NOCHECK podczas włączania ograniczenia CHECK w SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dodaj kolumnę z wartością domyślną do istniejącej tabeli w SQL Server

  2. Jak zlokalizować zadania agenta programu SQL Server w Azure Data Studio

  3. Jak używać OBJECT_ID() na obiektach między bazami danych w SQL Server

  4. Nie można połączyć się z serwerem SQL za pomocą PHP

  5. SQL Server podzielił plik CSV na wiele wierszy