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已经完成;不是 更长的可用时间。
我的语法是否正确?我之前使用过插入触发器,但没有更新。
答案 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