查找给定表的所有相关表

gil*_*ian 22 sql

我正在开发700多个表.我需要查看给定表的所有相关表的列表.你能推荐一款能够提供这样东西的应用吗?

Aar*_*ght 33

如果您的数据库支持信息架构视图(大多数都支持),那么您可以运行此查询:

SELECT
    c.CONSTRAINT_NAME,
    cu.TABLE_NAME AS ReferencingTable, cu.COLUMN_NAME AS ReferencingColumn,
    ku.TABLE_NAME AS ReferencedTable, ku.COLUMN_NAME AS ReferencedColumn
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS c
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu
ON cu.CONSTRAINT_NAME = c.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ku
ON ku.CONSTRAINT_NAME = c.UNIQUE_CONSTRAINT_NAME
Run Code Online (Sandbox Code Playgroud)

这将输出所有引用约束(外键),源(引用)表/列和主键(引用)表/列的列表.

如果要查看对特定表的引用,只需添加:

WHERE ku.TABLE_NAME = 'SomeTable'
Run Code Online (Sandbox Code Playgroud)

  • 是否可以在sql server中以这种方式选择单个记录及其所有相关记录? (2认同)

Dip*_*iya 17

使用内置过程获取给定表的相关表的简单且最简单的解决方案.

exec sp_fkeys 'Your_PK_TABLE_NAME'
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 7

根据数据库产品,您应该能够INFORMATION_SCHEMA像这样查询视图:

Select FK.TABLE_SCHEMA, FK.TABLE_NAME
From INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS As RC
    Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As PK
        On PK.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
    Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As FK
        On FK.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
Where PK.TABLE_SCHEMA = 'dbo'
    And PK.TABLE_NAME = '<target table name>'   
Run Code Online (Sandbox Code Playgroud)