我想在我的数据库中找到所有引用某个表的主键的外键。
例如,我在表A
中有一个列T
,它是主键。现在我想找到在外键约束中引用哪个表列A
?
我考虑过的一种简单方法是检查数据库图表,但这只适用于数据库非常小的情况。对于拥有50个以上表的数据库来说,这不是一个很好的解决方案。
任何替代方案?
答案 0 :(得分:5)
在最后一行,将[Primary Key Table]更改为您的表名,将[Primary Key Column]更改为您的列名,然后在您的数据库上执行此脚本以获取主键的外键。
SELECT FK.TABLE_NAME as Key_Table,CU.COLUMN_NAME as Foreignkey_Column,
PK.TABLE_NAME as Primarykey_Table,
PT.COLUMN_NAME as Primarykey_Column,
C.CONSTRAINT_NAME as Constraint_Name
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME =Fk.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME=PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME =i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
WHERE PK.TABLE_NAME = '[Primary Key Table]' and PT.COLUMN_NAME = '[Primary Key Column]';
答案 1 :(得分:1)
查看How to find foreign key dependencies in SQL Server?
您可以对PK_Table和PK_Column进行排序以获得您想要的内容
答案 2 :(得分:1)
您想查询sys表。
获取将列用作fk的所有表名的查询类似于
select name
from sys.tables
where object_id in
( select parent_object_id
from sys.foreign_key_columns
where referenced_object_id = 12345
and referenced_column_id = 1);
获取您的referenced_object_id和referenced_column id:
select object_id from sys.tables where name = 'Table T'
使用该object_id,找到列id:
select column_id from sys.columns where name = 'Column A' and object_id = 12345