假设
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失败了......
[我知道自动递增列,但这对我实际做的事情来说还不够。]
答案 0 :(得分:2)
This answer显示了所需的锁定提示:
INSERT INTO TableA
WITH (TABLOCKX,HOLDLOCK) -- added
VALUES ((SELECT MAX(IntColumn) FROM TableA) + 1)
在Adam's utility中尝试了它并且它正在发挥作用。
答案 1 :(得分:1)
您使用SQL 2012标记了此问题。如果这是您的环境,则可以使用新的序列功能:http://msdn.microsoft.com/en-us/library/ff878091.aspx和http://msdn.microsoft.com/en-us/library/ff878370.aspx