关于sql:查找引用某个主键的数据库中的所有外键约束

Find all foreign keys constraints in database referencing a certain primary key

本问题已经有最佳答案,请猛点这里访问。

我想在我的数据库中找到所有引用某个表的主键的外键。

例如,我在表T中有一个A列,它是主键。 现在我想找到在外键约束中引用哪个表列A

我考虑过的一个简单方法是检查数据库图表,但这只适用于数据库非常小的情况。 对于拥有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进行排序以获得所需内容