2012-02-03 76 views
2

這觸發:有沒有辦法使INSTEAD OF觸發器與SCOPE_IDENTITY一起工作?

ALTER TRIGGER InsteadTrigger on CustomerView 
INSTEAD OF INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO Person 
     SELECT FirstName, LastName 
     FROM inserted 

導致該查詢返回null。

INSERT INTO CustomerView (FirstName, LastName) Values ('Jonathan', 'Allen') 
SELECT SCOPE_IDENTITY() 

有沒有辦法修復觸發器,以便SCOPE_IDENTITY將返回正確的值? (我不能使用@@ IDENTITY,因爲桌子上可能還有其他觸發器。)

+0

P.S.我的客戶正在詢問這件事。我絕不會故意讓自己陷入這種情況。 – 2012-02-03 21:02:18

+0

首先,假設INSERT的常見錯誤只會處理一行。多行可以通過單個插入語句插入。 – 2012-02-03 21:07:14

+1

不,我不是。該觸發器可用於多行,除非只插入一行,否則沒有人希望SCOPE_IDENTITY能夠工作。 – 2012-02-03 21:08:12

回答

3

不,我不認爲這是可能的。

當然你可以從觸發器本身返回它。

ALTER TRIGGER InsteadTrigger on CustomerView 
INSTEAD OF INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO Person 
     SELECT FirstName, LastName 
     FROM inserted 

     SELECT SCOPE_IDENTITY() AS PersonId 
END 

你也可以使用CONTEXT_INFO打壓的結果集除了當你需要它。

使用OUTPUT子句中this Microsoft Connect Item討論,但是在插入之前計算到主表等前IDENTITY函數被調用在這種情況下無法正常工作。

+0

不是很好,但是這種情況也不是這樣。在這個時候,我確實相信這是他們可以期待的最好的。 – 2012-02-04 01:24:49

相關問題