2016-11-11 57 views
0

我有一个外键列表。我想找出这些FK指向的表格和指向的实际关键点。在SQL Server中获取引用表

我有像这样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代码,这对于存储过程并不能很好地发挥作用。

+0

@Tanner我用我的代码的结果,所以我会需要这个作为一个实际的查询 –

+0

可能的复制[如何在sql server中查找表的所有依赖项](http://stackoverflow.com/questions/22005698/how-to-find-all-the-dependencies-of-a-table-in-sql-server) – Tanner

+0

已添加为什么它不是重复的解释 –

回答

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