【问题标题】:Find all foreign keys constraints in database referencing a certain primary key [duplicate]在引用某个主键的数据库中查找所有外键约束[重复]
【发布时间】:2014-01-24 23:28:49
【问题描述】:

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

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

我考虑过的一种简单方法是检查数据库图表,但这仅适用于数据库非常小的情况。对于拥有超过 50 个表的数据库,这不是一个很好的解决方案。

还有其他选择吗?

【问题讨论】:

标签: sql sql-server foreign-keys primary-key foreign-key-relationship


【解决方案1】:

在最后一行,将 [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]';

【讨论】:

    【解决方案2】:

    How to find foreign key dependencies in SQL Server?

    您可以对 PK_Table 和 PK_Column 进行排序以获得您想要的内容

    【讨论】:

    • 感谢您的回答,我找到了其他方法:右键单击表格并选择查看依赖项。
    【解决方案3】:

    您要查询 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多