6
在SQL Server 2008中打開後,我使用這樣的模式:成交仍取消查詢
begin transaction
begin try
/* do something */
end try
begin catch
if @@TRANCOUNT > 0
rollback
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity,1)
end catch
if @@TRANCOUNT > 0
commit transaction
時,我打「取消執行查詢」上的SQL Server Management Studio中按鈕,它取消查詢和葉交易開放。
這是預期的行爲?或者我的模式有錯誤。它不應該回滾交易嗎?
見更新回答 – 2012-01-03 07:42:00
這個答案似乎迴避了這個問題的精神......這個問題可以改寫爲「爲什麼取消查詢不會觸發try/catch構造的」catch「塊?如果這是有意的行爲,爲什麼?作爲該proc的設計者,我期望proc能夠成功完成或回滾 - try/catch的隱含語義不允許「停止執行,但不必擔心catch塊,並保持事務處於打開狀態,直到SQL服務器決定在斷開連接時清理交易「......一個理智的行爲當然是提高」取消錯誤「,當然? – Tao 2013-11-09 00:16:34
@Tao也許你是對的,但作者接受了答案,請不要爲他考慮。 – 2013-11-09 15:45:00