Find all foreign keys constraints in database referencing a certain primary key
本问题已经有最佳答案,请猛点这里访问。
我想在我的数据库中找到所有引用某个表的主键的外键。
例如,我在表
我考虑过的一个简单方法是检查数据库图表,但这只适用于数据库非常小的情况。 对于拥有50个以上表的数据库来说,这不是一个很好的解决方案。
任何替代品?
在最后一行,将[主键表]更改为表名,将[主键列]更改为列名,然后在数据库上执行此脚本以获取主键的外键。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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]'; |
您想查询sys表。
获取将列用作fk的所有表名的查询将类似于
1 2 3 4 5 6 7 | 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:
1 | SELECT object_id FROM sys.tables WHERE name = 'Table T' |
使用该object_id,找到列ID:
1 | SELECT column_id FROM sys.columns WHERE name = 'Column A' AND object_id = 12345 |
看看如何在SQL Server中找到外键依赖项?
您可以对PK_Table和PK_Column进行排序以获得所需内容