【发布时间】:2012-09-12 22:59:53
【问题描述】:
假设
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 失败了...
[我知道自动递增的列,但这对于我实际做的事情来说还不够。]
【问题讨论】:
-
下载 Adam Machanic 的免费 SQL Query Stress 实用程序,让它运行 10、20、50、100 个并发客户端,看看是否有任何重复。如果你这样做,让它运行,例如同时进行 20 次迭代和 20 个客户端 - 我几乎可以保证您会看到主键违规,这表明您正在得到重复。此代码不安全。
-
很棒的工具,感谢您的启发!
标签: sql-server tsql sql-server-2012