2009-11-11 108 views

回答

3

我的直觉说,该过程仍然会执行,所以我一起扔一个简单的测试。

SQL:

Create Procedure TestDelay 
AS 

waitfor delay '00:00:40' 

update table_1 
set dt = getdate() 

而且在VB.Net(同C#的了):

Dim con As New SqlConnection(myconnectionstring) 
    Dim com As New SqlCommand("TestDelay", con) 
    com.CommandType = CommandType.StoredProcedure 
    con.Open() 
    Try 
     com.ExecuteNonQuery() 
    Catch ex As Exception 
     con.Close() 
     Response.Write(ex.Message) 
    End Try 

结果? 超时后程序没有完成。我查了一下在SQL事件探查器跟踪过程中发生的事情,果然SQL似乎包裹中的呼叫交易,必须推出该交易重新站上超时。

注:该测试是针对2005年的SQL运行,但我怀疑的结果是在其他版本类似。

+0

正确的,至少回SQL 7 – gbn 2009-11-11 19:53:55

1

作为布伦丹所述,客户端发送一个“异常终止”并停止处理死。就如此容易。

然而,比这更复杂......

任何交易不会回滚默认和锁刚离开那里,直到连接被关闭。如果返回到连接池和重复使用,那么这个算作收盘。

这就是为什么SET XACT_ABORT ON(其它问题SO1SO2)建议