Ако трябва да върнете списък с всички ненадеждни 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.