只是说我在下面的触发器中有一个throw或RaiseError
IF OBJECT_ID('Sales.OrderDetails_AfterTrigger', 'TR') IS NOT NULL
DROP Trigger Sales.OrderDetails_AfterTrigger;
GO
CREATE TRIGGER Sales.OrderDetails_AfterTrigger ON Sales.OrderDetails
AFTER INSERT, UPDATE
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN;
SET NOCOUNT ON;
-- Check all rows
IF EXISTS(...)
BEGIN
RAISERROR ('This error message is not displayed', 10, 1 )
END
END
GO
如果在触发器中抛出raiseerror将阻止dml语句被回滚?
只是我发现在发生这种情况时我仍然会插入行。
答案 0 :(得分:1)
查看microsoft http://msdn.microsoft.com/en-us/library/ms178592.aspx
的提升错误页面中的备注部分“当在TRY块中以高于11或更高的严重性运行RAISERROR时,它将控制转移到相关的CATCH块”
你投掷10个控件不会进入catch语句。 如果你试图在那里阻止它,那将对你的调用代码流有所帮助(不是很难说明)。
但是!!你评论说仍然插入了行。 我怀疑你应该使用插入更新触发器而不是“后”触发器。
由于您已经插入了10行,因此您的行已经插入,并且不会破坏事务。
抱歉,如果不知道你在调用插入/更新语句触发触发器的上下文,那么就不会更精确但有点难以理解