Select query to find the constraint of PK/FK in a table to list all the related tables in SQL Server

问题描述 投票:0回答:1

你能帮忙让选择查询列出所有相关表到另一个表的 PK/FK)

我有3张桌子,

Table1
包含
cust_ID
(PK)和其他2张桌子(
table2
table3
)有一个FK到
Table1

需要使用约束来过滤所有相关表并在输出中列出特别列出表 2 和表 3 中的参考表和参考列 - 可能在生产中列出所有相关表和列(以百万为单位)

无法获取 2 列参考表和参考列(完整列表)。

你能帮忙列出所有基于另一个表的另一个主键的外键表和列吗

主键(在

table1
中)应该列出外键(在
Table2
Table3
中)及其表名和列名。

表1

客户ID cust_Name
10001 约翰
10002 彼得
10003 史蒂夫
10004 迈克
10005 罗布

表2

cust_ID_bk cust_Pay
10001 10
10002 20

表 3

cust_ID_sk cust_Phone#
10001 1234567890
10002 2023456789
10003 5678904345

预期产出

CONSTRAINT_Name CONSTRAINT_Type TABLE_NAME 列名 参考表 参考专栏
SYS_12345 主键 表1 客户ID 表2 cust_ID_bk
SYS_12345 主键 表1 客户ID 表 3 cust_ID_sk

我尝试使用以下查询,但无法获取参考表和参考列

select 
    a.CONSTRAINT_NAME, a.CONSTRAINT_TYPE, a.TABLE_NAME,
    b.COLUMN_NAME, b.Reference Table, b.Reference Column
from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS a, 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE b
where 
    a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
    and a.table_name = 'Table1'
sql sql-server sql-server-2017
1个回答
0
投票
select a.CONSTRAINT_NAME,a.CONSTRAINT_TYPE,a.TABLE_NAME,b.COLUMN_NAME,object_name(fkc.referenced_object_id) Reference_Table,col.name Reference_Column from 
INFORMATION_SCHEMA.TABLE_CONSTRAINTS a inner join information_schema.KEY_COLUMN_USAGE b 
        on a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
Left join sys.foreign_key_columns fkc 
        on a.CONSTRAINT_NAME=object_name(fkc.constraint_object_id)
left JOIN sys.columns AS col
        ON fkc.referenced_object_id = col.object_id AND fkc.referenced_column_id = col.column_id
where  a.table_name = 'geographicalhierarchy'
© www.soinside.com 2019 - 2024. All rights reserved.