有没有办法让INSTEAD OF触发器与SCOPE_IDENTITY配合使用?

时间:2012-02-03 21:02:13

标签: sql-server-2008 tsql

此触发器:

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,因为涉及的桌子上可能还有其他触发器。)

1 个答案:

答案 0 :(得分: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函数之前进行评估。 / p>