alexolb自己在上面的評論中回答了這個問題。另一種選擇是使用IDENT_CURRENT
函數,而不是從表中選擇。這種方法的缺點是它總是比種子開始高一號,但是通過將種子設置爲一個較低的單位可以很容易地解決這個問題。我覺得使用函數比子查詢更好。
例如:
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
'@@ IDENTITY'無效這裏。嘗試'INSERT表B SELECT identity_column_name,1從插入;' –
我試過,但也有一個外鍵問題。看起來,標識列只在插入後計算出來,而我之前需要它以避免錯誤... – alexolb
您確定您正在向正確的表格追逐外鍵嗎?這應該和'BEGIN TRAN; INSERT tableA; INSERT TableB SELECT SCOPE_IDENTITY(); COMMIT TRAN;' –