Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да върнете всички ненадеждни ограничения CHECK в SQL Server (пример за T-SQL)

Ако трябва да върнете списък с всички ненадеждни CHECK ограничения в база данни на SQL Server, можете да изпълните T-SQL кода по-долу.

Под „недоверен“ имам предвид онези ограничения, които имат свой is_not_trusted флагът е зададен на 1 .

Пример 1 – Върнете само ненадеждни ограничения за ПРОВЕРКА

Тази заявка връща само ненадеждния CHECK ограничения в текущата база данни.

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

Резултат:

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

Тази заявка връща името на ограничението, името на таблицата, към която е приложено, и дефиницията на ограничението.

Той също така връща is_disabled колона. Това ни казва дали ограничението в момента е активирано или деактивирано. Това може да е важно да знаете, тъй като ограничение може да бъде активирано, но в същото време ненадеждно.

Той прави заявки за sys.check_constraints системен изглед. Знаем, че връща само ненадеждни ограничения, защото WHERE клаузата определя само редове, които имат is_not_trusted колона, зададена на 1 .

Ако искате да върнете всички доверени CHECK ограничения, просто променете 1 до 0 .

Пример 2 – Връщане на състоянието на доверие

Ето го отново, но този път сменям definition колона с is_not_trusted колона:

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;

Резултат:

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

Вероятно е излишно да включите is_not_trusted колона, но поне помага да се повтори фактът, че активирано ограничение все още може да не е надеждно.

Пример 3 – Връщане на всички CHECK ограничения

Следната заявка връща всички CHECK ограничения за текущата база данни (не само за ненадеждните):

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

Резултат:

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

За подробна дискусия (и примери) на is_not_trusted флаг, вижте Какво трябва да знаете за WITH NOCHECK, когато активирате ограничение CHECK в 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. Какво SqlDbType се съпоставя с varBinary(max)?

  2. Показатели за производителност на SQL сървъра, за да останете пред играта

  3. Как мога да попълня колона с произволни числа в SQL? Получавам една и съща стойност във всеки ред

  4. Концепции за проектиране на база данни със SQL Server Management Studio (SSMS) Част 1

  5. 5 бързи полезни съвети за SQL Server Производствени администраторите на бази данни