Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找数据库中引用某个主键的所有外键约束_Sql_Sql Server_Foreign Keys_Primary Key_Foreign Key Relationship - Fatal编程技术网

Sql 查找数据库中引用某个主键的所有外键约束

Sql 查找数据库中引用某个主键的所有外键约束,sql,sql-server,foreign-keys,primary-key,foreign-key-relationship,Sql,Sql Server,Foreign Keys,Primary Key,Foreign Key Relationship,我想在数据库中找到引用某个表的主键的所有外键 例如,我在表T中有一列a,它是主键。现在我想找出外键约束中引用了哪个表列A 我考虑过的一种简单方法是检查数据库关系图,但这仅在数据库非常小的情况下有效。对于拥有50多个表的数据库来说,这不是一个很好的解决方案 有其他选择吗?看看 您可以对PK_表和PK_列进行排序,以获得您想要查询的sys表 获取列用作fk的所有表名的查询如下 select name from sys.tables where object_id in

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

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

我考虑过的一种简单方法是检查数据库关系图,但这仅在数据库非常小的情况下有效。对于拥有50多个表的数据库来说,这不是一个很好的解决方案

有其他选择吗?

看看


您可以对PK_表和PK_列进行排序,以获得您想要查询的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);
要获取引用的\u对象\u id和引用的\u列id:

select object_id from sys.tables where name = 'Table T'
select column_id from sys.columns where name = 'Column A' and object_id = 12345
使用该对象的id,查找列id:

select object_id from sys.tables where name = 'Table T'
select column_id from sys.columns where name = 'Column A' and object_id = 12345

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

或者这一条:(我认为,已接受的答案涵盖了这里的问题)感谢您的回答,我找到了另一种方法:右键单击表并选择“查看依赖项”。