我想設置SET XACT_ABORT ON
與交易一個SQL Server 2008 R2的存儲過程,因此,無論是在創作劇本:如何在SQL Server事務中設置「SET XACT_ABORT ON」?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET XACT_ABORT ON
GO
CREATE PROCEDURE MyProc
AS
BEGIN TRAN
...
IF @@ERROR <> 0
BEGIN
GOTO Done
END
...
IF @@ERROR <> 0
BEGIN
GOTO Done
END
COMMIT TRAN
Done:
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
GO
成功創建後,我通過點擊檢查交易「修改」存儲過程選項在生成的腳本ALTER PROCEDURE
我沒有看到SET XACT_ABORT ON
行:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE MyProc
AS
BEGIN TRAN
...
我在哪裏錯了或者有什麼訣竅?如何正確定義SET XACT_ABORT ON
?
您沒有在過程定義中包含'SET'語句。當你在2008年時,你應該看看'TRY ... CATCH'。 –
@馬丁·史密斯:你的意思是不包括'SET XACT_ABORT ON'所有,而是由趕上'TRY..CATCH'錯誤,並明確'ROLLBACK'事務? – rem
參見[這個答案](http://stackoverflow.com/questions/1150032/what-is-the-benefit-of-using-set-xact-abort-on-in-a-stored-procedure/1150350#1150350 )和下面的評論來討論這個問題。我絕對不會因爲你的代碼在TRY ... CATCH可用時測試SQL Server 2008上的'@@ ERROR'而煩惱。只要提到'XACT_ABORT'在'TRY'塊中有不同的效果。 –