衝突することを理解していますよね?
このようなことを行う必要があり、デッドロックが発生する可能性があるため、ここで何を達成しようとしているのかをよく確認してください
DECLARE @id int
BEGIN TRAN
SELECT @id = MAX(id) + 1 FROM Table1 WITH (UPDLOCK, HOLDLOCK)
INSERT INTO Table1(id, data_field)
VALUES (@id ,'[blob of data]')
COMMIT TRAN
衝突を説明するために、いくつかのコードを提供しました
最初にこのテーブルを作成し、1 行挿入します
CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go
2 つのクエリ ウィンドウを開き、これを同時に実行します
declare @i int
set @i =1
while @i < 10000
begin
BEGIN TRAN
INSERT INTO Table1(id, data_field)
SELECT MAX(id) + 1, '[blob of data]' FROM Table1
COMMIT TRAN;
set @i [email protected] + 1
end
これらがたくさん表示されます
サーバー:メッセージ 2627、レベル 14、状態 1、行 7 PRIMARY KEY 制約 'PK__Table1__3213E83F2962141D' の違反。オブジェクト 'dbo.Table1' に重複するキーを挿入できません。ステートメントは終了しました。