獲取

2016-09-16 78 views
0

我想刪除舊的並插入一個新的外鍵,如果舊的是錯誤的列列的對象ID:獲取

SELECT * FROM sys.foreign_keys fk 
INNER JOIN sys.foreign_key_columns fkc ON (fk.object_id = fkc.constraint_object_id) 
WHERE fk.parent_object_id = OBJECT_ID(@Table) 
AND fk.referenced_object_id = OBJECT_ID(@RefTable) 
AND (fkc.parent_object_id != OBJECT_ID(@FieldName) OR fkc.referenced_object_id != OBJECT_ID(@RefFieldName)) 

但兩者OBJECT_ID(@FieldName)OBJECT_ID(@RefFieldName)總是返回NULL,雖然列中存在 - 我怎樣才能得到列的對象ID?

回答

2

列沒有object_ids - 它們有column_ids。

FK將parent_object_id與referenced_object_id匹配(在sys.objects中具有匹配的object_id以獲取名稱)以及parent_column_id轉換爲referenced_column_id(使用x_object_id和x_column_id在sys.columns中查找object_id和column_id)。

我不確定如何確定哪些是「錯誤」列,但由於列名不必在FK關係中匹配,除非保證具有確切的名稱。有關它們可能不匹配的示例,請注意上一段中我們有引用object_id的referenced_object_id。