alexolb は、上記のコメントで質問に答えました。もう 1 つの方法はIDENT_CURRENT
、テーブルから選択する代わりに関数を使用することです。このアプローチの欠点は、常にシードよりも 1 番高く開始されることですが、シードを 1 単位低く設定することで簡単に解決できます。サブクエリよりも関数を使った方が気持ちいいと思います。
例えば:
CREATE TABLE [tbl_TiggeredTable](
[id] [int] identity(0,1) NOT NULL,
[other] [varchar](max)
)
CREATE TRIGGER [trgMyTrigger]
ON [tbl_TriggeredTable]
INSTEAD OF INSERT,UPDATE,DELETE
SET identity_insert tbl_TriggeredTable ON
INSERT INTO tbl_TriggeredTable (
[id],
[other]
)
SELECT
-- The identity column will have a zero in the insert table when
-- it has not been populated yet, so we need to figure it out manually
case i.[id]
when 0 then IDENT_CURRENT('tbl_TriggeredTable') + IDENT_INCR('tbl_TriggeredTable')
ELSE i.[id]
END,
i.[other],
FROM inserted i
SET identity_insert tbl_TriggeredTable OFF
END