如果旧的外键位于错误的列上,我想删除旧的并插入新的外键:
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?
答案 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的前一段。