【问题标题】:Getting Referenced tables in SQL Server在 SQL Server 中获取引用的表
【发布时间】:2016-11-11 15:39:38
【问题描述】:

我有一个外键列表。我想找出这些 FK 所指向的表格以及所指向的实际键。

我有一个 FK 的列表,如下所示:

columnName0, columnName1, columnName2

外键引用

  • columnName0 参考table0.idTable0
  • columnName1 参考table1.idTable1
  • columnName2 参考table2.idTable2

示例表:

Table0

idTable0, PK
name

表 1

idTable1, PK
age

表2

idTable2, PK
createdOn

示例结果:

| column      | referenced_column | referenced_table |
|-------------|-------------------|------------------|
| columnName0 | idTable0          | table0           |
| columnName1 | idTable1          | table1           |
| columnName2 | idTable2          | table2           |

我正在尝试像这样翻译我在 MySQL 中所做的事情:

SELECT DISTINCT
    COLUMN_NAME AS column,
    REFERENCED_COLUMN_NAME AS referenced_column,
    REFERENCED_TABLE_NAME AS referenced_table
FROM 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE 
    COLUMN_NAME IN (?);

关于重复标记的注意事项

我将不得不使用直接查询(没有存储过程)。

我会将查询转换为Knex.js 代码,它不能很好地与存储过程配合使用。

【问题讨论】:

标签: sql-server


【解决方案1】:

不确定这是否正是您想要的,但此查询按名称、键引用的表和列以及引用的表和列返回所有 FK。您可以根据需要添加适当的 WHERE 过滤器或 ORDER BY 子句:

SELECT fk.[name], OBJECT_NAME(fk.parent_object_id) AS TableName, c.[name] AS ColumnName, OBJECT_NAME(fk.referenced_object_id) AS ReferencedTable, rc.[name] AS ReferencedColumnName
FROM sys.foreign_keys fk
INNER JOIN sys.foreign_key_columns kc ON fk.object_id = kc.constraint_object_id 
INNER JOIN sys.columns c ON kc.parent_object_id = c.object_id AND kc.parent_column_id = c.column_id
INNER JOIN sys.columns rc ON kc.referenced_object_id = rc.object_id AND kc.referenced_column_id = rc.column_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-17
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2010-12-31
    • 2015-08-03
    • 2011-04-23
    相关资源
    最近更新 更多