2016-11-11 56 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