我有一个主表,其中有许多关联表使用" id"外键。
我需要更新此主表中的一行。
不是一个接一个地更新行的所有字段,而是简单地删除整行并使用新值重新创建它(通过保留原始主键) !)。
在事务实际提交之前,是否有一种方法可以在事务内部删除具有外键约束的行(如果使用相同的主键重新创建行)?
我试过了,它似乎没有用......
除了在DELETE操作之前删除约束之外,还有什么办法可以实现吗?某种锁?
答案 0 :(得分:1)
没有
不删除/禁用约束,SQL Server将强制执行该关系并阻止您删除引用的行。
可以禁用约束,但是在启用约束时会产生开销,SQL Server必须先验证对该键的每次引用,然后再考虑可信关系。
你最好花时间开发一个单独的更新/ upsert函数,而不是每次需要更改记录时都要产生额外的处理开销。
您可以更改外键以使用CASCADE DELETE,但它有自己的开销和行李。