获取列的对象ID

时间:2016-09-16 16:33:08

标签: sql sql-server

如果旧的外键位于错误的列上,我想删除旧的并插入新的外键:

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?

1 个答案:

答案 0 :(得分:2)

列没有object_ids - 它们有column_ids。

FKs将parent_object_id与referenced_object_id匹配(在sys.objects中匹配object_ids以获取名称)和parent_column_id与referenced_column_id匹配(使用x_object_id和x_column_id在sys.columns中查找object_id和column_id)。

我不知道你怎么能确定哪个是"错误"列虽然列名不必在FK关系中匹配,除非您保证具有确切的名称。有关它们可能不匹配的示例,请注意我们引用object_id的referenced_object_id的前一段。