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.aspxおよびhttp://msdn.microsoft.com /en-us/library/ff878370.aspx

于 2012-10-04T18:47:10.913 に答える