3

假设

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 失败了...

[我知道自动递增的列,但这对于我实际做的事情来说还不够。]

4

2 回答 2

2

这个答案显示了所需的锁定提示:

INSERT INTO TableA
WITH (TABLOCKX,HOLDLOCK) -- added
VALUES ((SELECT MAX(IntColumn) FROM TableA) + 1)

在Adam 的实用程序中进行了尝试,它正在工作。

于 2012-09-13T07:14:20.160 回答
1

您使用 SQL 2012 标记了这个问题。如果这是您的环境,您可以使用新的序列功能:http: //msdn.microsoft.com/en-us/library/ff878091.aspxhttp://msdn.microsoft.com /en-us/library/ff878370.aspx

于 2012-10-04T18:47:10.913 回答