假设
CREATE TABLE TableA
(
IntColumn INT NOT NULL PRIMARY KEY
)
INSERT INTO TableA VALUES (0)
下面是原子的吗?即,如果多个应用程序线程执行以下操作,我是否有最终违反 PK 的风险?
INSERT INTO TableA
VALUES ((SELECT MAX(IntColumn) FROM TableA) + 1)
你能给我指点有关这方面的任何文档吗?我的 google-fu 失败了...
[我知道自动递增的列,但这对我实际做的事情来说还不够。]
最佳答案
This answer显示所需的锁定提示:
INSERT INTO TableA
WITH (TABLOCKX,HOLDLOCK) -- added
VALUES ((SELECT MAX(IntColumn) FROM TableA) + 1)
在 Adam's utility 中尝试过它正在运行。
关于sql-server - 带有子查询的 INSERT 的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12397224/