Mil*_*les 2 sql transactions sql-server-2008 sql-server-2008-r2
我的同事在程序中有这个:
BEGIN TRAN
--Some deletes and inserts
IF(@@error <> 0)
BEGIN
ROLLBACK TRAN
RETURN
END
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
我在存储过程中有另一个只是:
BEGIN TRANSACTION
--Some deltes and inserts
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)
我已经测试过并发现我的程序总是在错误期间(例如更改列数据类型等测试)回滚所有内容而不显式编码回滚.此外,我已经了解到@@errorSQL Server 2005及更高版本的使用条件已过时.
您认为为SQL Server 2008 R2及更高版本执行事务的正确方法是什么?谢谢
mar*_*c_s 12
是的,这ROLLBACK是必要的!
我将基于此模板为SQL Server 2005及更高版本执行存储过程:
BEGIN TRANSACTION
BEGIN TRY
-- put your T-SQL commands here
-- if successful - COMMIT the work
COMMIT TRANSACTION
END TRY
BEGIN CATCH
-- handle the error case (here by displaying the error)
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
-- in case of an error, ROLLBACK the transaction
ROLLBACK TRANSACTION
-- if you want to log this error info into an error table - do it here
-- *AFTER* the ROLLBACK
END CATCH
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15668 次 |
| 最近记录: |