UPDATE触发器问题

时间:2016-10-06 12:28:07

标签: sql-server

ALTER TRIGGER [dbo].[tInsertTaskFromOpportunityReassignment]
ON [dbo].[OpportunityBase]
FOR UPDATE
AS
BEGIN
    IF UPDATE(owninguser)
    BEGIN
        DECLARE @opportunityid uniqueidentifier
        SET @opportunityid = (SELECT
            OpportunityId
        FROM updated)
    BEGIN TRY
        EXEC sp_CreateTaskFromOpportunityAssign @opportunityid
    END TRY
    BEGIN CATCH
        INSERT INTO Errors (errornumber, errorseverity, errorstate, errorprocedure, errorline, errormessage)
            VALUES (ERROR_NUMBER(), ERROR_SEVERITY(), ERROR_STATE(), ERROR_PROCEDURE(), ERROR_LINE(), ERROR_MESSAGE())
    END CATCH
    END
END

从我的应用程序调用它,我收到了回复:

  

内部服务器错误。这个SqlTransaction已经完成;不是   更长的可用时间。

我的语法是否正确?我之前使用过插入触发器,但没有更新。

1 个答案:

答案 0 :(得分:1)

你必须做一个ROLLBACK,因为你做了一个INSERT:

BEGIN CATCH
    IF (XACT_STATE()) = -1  
    BEGIN  
        ROLLBACK TRANSACTION;  
    END; 
    INSERT INTO Errors (errornumber, errorseverity, errorstate, errorprocedure, errorline, errormessage)
        VALUES (ERROR_NUMBER(), ERROR_SEVERITY(), ERROR_STATE(), ERROR_PROCEDURE(), ERROR_LINE(), ERROR_MESSAGE())
END CATCH