私はあなたがやろうとしていることをすることを提案していません、しかしあなたがそれをしたいのなら、これはその方法です。私は質問に答えているだけで、問題を解決していません。
procでは、これを実行している間、テーブルをロックして、潜入しないようにします。何かを使用して、次のリンクを使用します。
EXEC @result = sp_getapplock @Resource = @LockResource,
@LockMode = 'Exclusive'
と
EXEC sp_releaseapplock @Resource = @LockResource
テーブル
DECLARE @table TABLE ( id INT, val VARCHAR(20) )
データ
INSERT INTO @table
(
id,
val
)
SELECT 1,
'Test'
UNION ALL
SELECT 2,
'Test'
UNION ALL
SELECT 5,
'Test 2'
UNION ALL
SELECT 24,
'Test 3'
UNION ALL
SELECT 67,
'Test 4'
クエリ
INSERT INTO @table
SELECT TOP 1
id + 1,
'TEST'
FROM @table t1
WHERE NOT EXISTS ( SELECT TOP 1
1
FROM @table
WHERE id = t1.id + 1 )
ORDER BY id
INSERT INTO @table
SELECT TOP 1
id + 1,
'TEST'
FROM @table t1
WHERE NOT EXISTS ( SELECT TOP 1
1
FROM @table
WHERE id = t1.id + 1 )
ORDER BY id
SELECT *
FROM @table
結果
id val
1 Test
2 Test
5 Test 2
24 Test 3
67 Test 4
3 TEST
4 TEST