【发布时间】:2013-10-02 18:48:04
【问题描述】:
在 SQL Server 2008r2 上,我们有一个如下所示的存储过程:
create procedure x(@arg1 as nvarchar(20), @arg2 ... )
as
begin
-- delete and insert values, depending on arguments
begin transaction;
delete from tblA where f1 = @arg1 ... ;
insert into tblB (a) select ... where f2 = @arg2 ... ;
commit transaction;
end;
我在 C# (.NET 4.5) 中使用 SqlCommand.ExecuteNonQuery() 方法调用此过程。
所有异常都被try--- catch捕获
现在在此方法的文档中,它说 “如果发生回滚,则返回值为 -1。”
问题:是否会发生回滚而没有异常?
到目前为止,我们总是遇到异常,如果 sql 语句无法执行。但是是否会出现回滚“自动”发生而不抛出异常的情况?
【问题讨论】:
-
hummm - 我认为根据 XACT_ABORT 设置,您可能会进入一个状态,即删除被尊重但插入不是。
-
@MikeMiller 在这种情况下,程序会简单地回滚,而不是抛出异常?
-
如果设置不正确,进程会抛出异常,只回滚Insert。
标签: c# .net sql-server