【发布时间】:2014-11-13 13:29:17
【问题描述】:
我需要在一个非常具体的场景中更新一个身份列(大多数时候身份将被单独保留)。当我确实需要更新它时,我只需要给它一个新值,所以我尝试使用 DELETE + INSERT 组合。
目前我有一个看起来像这样的工作查询:
DELETE Test_Id
OUTPUT DELETED.Data,
DELETED.Moredata
INTO Test_id
WHERE Id = 13
(这只是一个例子,真正的查询稍微复杂一些。)
一位同事提出了一个重要的观点。她问这是否不会导致死锁,因为我们正在同一张表中读写。尽管在示例中它可以正常工作(半打行),但在具有数万行的实际场景中,这可能无法正常工作。
这是一个真正的问题吗?如果是这样,有没有办法防止它?
我设置了一个 SQL Fiddle example。
谢谢!
【问题讨论】:
-
有趣的想法。如果这是一个索引键,那么即使它被允许(例如,对于具有序列而不是标识的列),相应的更新也可能只是作为删除 + 插入来实现。
标签: sql-server sql-insert uniqueidentifier sql-delete database-deadlocks