Как я могу перечислить все FK в базе данных sqlserver?
Можно ли перечислить все внешние ключи в базе данных?
Ответ 1
Я использую это утверждение, оно работает очень хорошо.
SELECT RC.CONSTRAINT_NAME FK_Name
, KF.TABLE_SCHEMA FK_Schema
, KF.TABLE_NAME FK_Table
, KF.COLUMN_NAME FK_Column
, RC.UNIQUE_CONSTRAINT_NAME PK_Name
, KP.TABLE_SCHEMA PK_Schema
, KP.TABLE_NAME PK_Table
, KP.COLUMN_NAME PK_Column
, RC.MATCH_OPTION MatchOption
, RC.UPDATE_RULE UpdateRule
, RC.DELETE_RULE DeleteRule
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KF ON RC.CONSTRAINT_NAME = KF.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KP ON RC.UNIQUE_CONSTRAINT_NAME = KP.CONSTRAINT_NAME
Ответ 2
Теоретически это сложно. Реляционная модель позволяет любому полю относиться к любому другому полю. Какие из них действительно используются, определяются всеми возможными операторами SELECT, которые могут быть использованы.Практически, это зависит от того, сколько таблиц содержит определения FK. Если кто-то потрудился тщательно определить все ссылки FK - и инструкции SELECT придерживаются этих правил - вы можете запросить их.
Однако, поскольку оператор SELECT может присоединиться к чему-либо, нет гарантии, что у вас есть all FK, если у вас также нет операторов all SELECT.
Edit.
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
Можете работать для вас.
Ответ 3
Я использую http://technet.microsoft.com/en-us/library/ms189807.aspx
SELECT * FROM sys.foreign_keys
То есть, если вы хотя бы на SQL Server 2005+ и хотите увидеть список имен FK.
Но вы, вероятно, хотите узнать больше о связанных с таблицами, не так ли, вот где ответ пригодится.
Ответ 4
Вы также можете использовать каноническую схему INFORMATION_SCHEMA в SQL Server 2005 и далее:
Как найти зависимости внешнего ключа в SQL Server?
Это будет работать и в других базах данных.
Ответ 5
Вот более информативный способ его представления
SELECT DISTINCT PARENT_TABLE =
RIGHT(Replace(TC.constraint_name, 'FK_', ''),
Len(Replace(TC.constraint_name, 'FK_', '')) - Charindex('_', Replace(TC.constraint_name, 'FK_', ''))),
CHILD_TABLE = TC.table_name,
CU.column_name,
TC.constraint_name,
TC.constraint_type
FROM information_schema.table_constraints TC
INNER JOIN information_schema.constraint_column_usage CU
ON TC.constraint_name = CU.constraint_name
WHERE TC.constraint_type LIKE '%foreign'
OR TC.constraint_type LIKE '%foreign%'
OR TC.constraint_type LIKE 'foreign%'