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

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

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

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

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

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

Резултат:

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

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

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

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

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

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

Резултат:

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

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

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

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

Резултат:

+--------------------------------+------------ --+----------------+| Ограничение | е_забранено | е_не_доверен ||--------------------------------+-------------- -+------------------|| FK_BandMember_Band | 1 | 1 || FK_BandMember_Musician | 1 | 1 || 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. Как да получите списък с таблици без ограничение на първичен ключ във всички бази данни на екземпляр на SQL Server - SQL Server / TSQL урок, част 62

  2. Прехвърляне на данни от една база данни в друга база данни

  3. Три лесни победи за производителност на SQL Server

  4. Оптимизация на SQL заявки – Как да определите кога и дали е необходимо

  5. SQL Server Express срещу express localdb