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

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

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

Недоверен външен ключ е този, който има свой is_not_trusted флагът е зададен на 1 .

Пример 1 – Върнете само ограничения за ненадеждни външни ключове

Тази заявка връща само ненадеждни ограничения за външен ключ в текущата база данни. За този пример връщам само името на ограничението, неговото доверено състояние, заедно с неговото активирано/деактивирано състояние.

ИЗБЕРЕТЕ име КАТО 'Ограничение', is_not_trusted, is_disabledFROM sys.foreign_keysWHERE is_not_trusted =1;

Резултат:

+-------------------+------------------+-- ------------+| Ограничение | е_не_доверен | is_disabled ||-----------------------+----------------+--- ------------|| FK_BandMember_Band | 1 | 1 || FK_BandMember_Musician | 1 | 0 |+-----------------------+----------------+--- ------------+

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

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

Включих и is_disabled флаг, защото ни показва дали ограничението в момента е активирано или не. Можем да видим, че едно от ограниченията е активирано, а другото не.

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

Ето отново същата заявка, но този път включвам таблицата и посочената таблица за всяко ограничение:

ИЗБЕРЕТЕ име КАТО 'Ограничение', OBJECT_NAME(parent_object_id) КАТО 'Таблица', OBJECT_NAME(referenced_object_id) КАТО 'Реферирана таблица', is_disabled, is_not_trustedFROM sys.foreign_keysWHERE is_not_trusted =

Резултат:

+-----------------------+-----------+-------- ------------+--------------+--------------+| Ограничение | Таблица | Реферирана таблица | е_забранено | е_не_доверен ||-----------------------+-----------+--------- -----------+--------------+--------------|| FK_BandMember_Band | Член на групата | Банда | 1 | 1 || FK_BandMember_Musician | Член на групата | Музикант | 0 | 1 |+-----------------------+------------+-------- -----------+--------------+--------------+

Пример 2 – Връщане на всички ограничения на външния ключ

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

ИЗБЕРЕТЕ име КАТО 'Ограничение', is_not_trusted, is_disabledFROM sys.foreign_keys;

Резултат:

+--------------------------------+------------ -----+--------------+| Ограничение | е_не_доверен | is_disabled ||--------------------------------+-------------- ----+--------------|| FK_BandMember_Band | 1 | 1 || FK_BandMember_Musician | 1 | 0 || FK_Период на членство_Член на групата | 0 | 0 |+--------------------------------+-------------- ----+--------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL:Обратно на конкатенацията на низове - как да разделите низ на множество записи

  2. Създаване на персонализирано изображение на SQL Server Docker върху официалното изображение

  3. Лоша идея ли е да имаш „ИЛИ“ в състояние INNER JOIN?

  4. Как работи INTERSECT в SQL Server

  5. Съкратете всички таблици в база данни в SQL Server - SQL Server / TSQL урок, част 55