2009-11-11 39 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が表示され、タイムアウト時にそのトランザクションをロールバックする必要があります。

注:このテストはSQL 2005に対して実行されましたが、他のバージョンでも同様の結果が得られると思われます。

+0

正しいをお勧めします理由です – gbn

1

brendanが述べたように、クライアントは「中断」を送信し、処理は停止します。それと同じくらい簡単です。接続が閉じられるまで、しかし、それはそれよりもっと複雑だ...

どれでも取引がデフォルトとロックでロールバックされません

はただそこに残されています。接続プールに戻されて再利用された場合、が終了としてカウントされません。

SET XACT_ABORT ON(他の質問SO1SO2)は、少なくともバックSQL 7に、

関連する問題