SQL Server - 使用DELETE / INSERT而不是UPDATE更新具有外键的表

时间:2018-04-09 17:18:47

标签: sql sql-server sqltransaction

我有一个主表,其中有许多关联表使用" id"外键。

我需要更新此主表中的一行。

不是一个接一个地更新行的所有字段,而是简单地删除整行并使用新值重新创建它(通过保留原始主键) !)。

在事务实际提交之前,是否有一种方法可以在事务内部删除具有外键约束的行(如果使用相同的主键重新创建行)?

我试过了,它似乎没有用......

除了在DELETE操作之前删除约束之外,还有什么办法可以实现吗?某种锁?

1 个答案:

答案 0 :(得分:1)

没有

不删除/禁用约束,SQL Server将强制执行该关系并阻止您删除引用的行。

可以禁用约束,但是在启用约束时会产生开销,SQL Server必须先验证对该键的每次引用,然后再考虑可信关系。

你最好花时间开发一个单独的更新/ upsert函数,而不是每次需要更改记录时都要产生额外的处理开销。

您可以更改外键以使用CASCADE DELETE,但它有自己的开销和行李。