【发布时间】:2016-07-21 07:35:26
【问题描述】:
我写了这个触发器:
ALTER TRIGGER [dbo].[trg_abort_insert]
ON [dbo].[F_DOCCURRENTPIECE]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRY
BEGIN TRAN
IF EXISTS (SELECT *
FROM Inserted i
INNER JOIN Deleted d ON i.CBMARQ= d.CBMARQ
WHERE i.DC_Piece <> d.DC_Piece
AND i.DC_Domaine = 0
AND i.DC_IdCol = 6)
COMMIT TRAN
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
IF @@TRANCOUNT>0
ROLLBACK
END CATCH;
END
我遇到了这个错误: EXECUTE 之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 1,当前计数 = 2
请帮帮我
【问题讨论】:
-
问题是因为你有一个带有事务的触发器。这导致了无数的悲伤。我 99.9999% 确定您的调用代码在交易中,对吗?从触发器中删除事务。
-
好的,当我删除开始事务并提交事务时,触发器就像不识别捕获一样。开始 trans 和 commit 是必不可少的,因为仅使用 try catch 不会执行代码,而且当我删除 ty catch 时,我遇到了这个错误:事务在触发器中结束。该批次已中止。
-
事务的存在不会影响语句流或阻止 try/catch 工作。你真的想在这里做什么?触发器中的事务不会起作用,因为任何 dml 语句中已经存在隐式触发器。如果您能解释您的要求,我们可以帮助您解决此问题。
-
-
这无助于解释您要做什么。也许你应该看看这里。 spaghettidba.com/2015/04/24/…
标签: sql-server tsql triggers