いくつかのシミュレーションアイデンティティ挿入:SQL Serverのどのバージョンを使用してください
CREATE TABLE #Test (Id int IDENTITY(1,1) PRIMARY KEY, Value int)
INSERT INTO #Test
VALUES
(100),
(200)
SELECT *
FROM #Test AS t
DECLARE @Temp TABLE (Id int, Value int, SetId bit)
INSERT INTO @Temp
VALUES
(-1, 1,1),
(-2, 2,1),
(-1, 33,0),
(-1, 44,0)
SET IDENTITY_INSERT #Test ON
INSERT INTO #Test
(Id, Value)
SELECT
CASE(t.SetId)
WHEN 1 THEN t.Id --just insert new Id
WHEN 0 THEN
IDENT_CURRENT('#Test') --get last identity value
+ ROW_NUMBER() OVER(ORDER BY t.Id) --simulate identity +1
- (SELECT COUNT(*) FROM @Temp AS t2 WHERE t2.SetId = 1) --skip inserted rows with Id
+ 1
END,
t.[Value]
FROM @Temp AS t
SET IDENTITY_INSERT #Test OFF
SELECT *
FROM #Test AS t
DROP TABLE #Test
? SQL Server 2012には「SEQUENCE」があります。 –
SQL 2016 SP1を使用しています – Anton