SQL中存储过程中使用事务,并且加入异常处理机制.
2014-05-06 11:21
645 查看
--存储过程中使用事务,并且加入异常处理机制. -- ============================================= CREATE PROCEDURE [dbo].[UP_Orders_Import] AS BEGIN BEGIN TRAN --开启事务 BEGIN TRY SELECT 1/0 COMMIT TRAN --提交事务 END TRY BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000) , @ErrorNumber INT , @ErrorSeverity INT , @ErrorState INT , @ErrorLine INT , @ErrorProcedure NVARCHAR(200) ; SELECT @ErrorNumber=ERROR_NUMBER(),@ErrorSeverity=ERROR_SEVERITY(), @ErrorState=ERROR_STATE(),@ErrorLine=ERROR_LINE(), @ErrorProcedure=ISNULL(ERROR_PROCEDURE(),'-') ; SELECT @ErrorMessage=N'Error %d, Level %d, State %d, Procedure %s, Line %d, ' +'Message: '+ERROR_MESSAGE() ; RAISERROR ( @ErrorMessage, @ErrorSeverity, 1, @ErrorNumber, -- parameter: original error number. @ErrorSeverity, -- parameter: original error severity. @ErrorState, -- parameter: original error state. @ErrorProcedure, -- parameter: original error procedure name. @ErrorLine -- parameter: original error line number. ) ; ROLLBACK TRAN --回滚事务 END CATCH END
sql事务注意点:
DECLARE @Referenznummer NVARCHAR(MAX) SET @Referenznummer = '934590-AE1023-1' BEGIN TRAN BEGIN TRY DECLARE @returnValue INT SET @returnValue = 11110 --(1)、变量在事务中是不会进行回滚的;默认值虽然是11110 SET @returnValue = 1 IF ( NOT EXISTS ( SELECT 1 FROM tbOrder WHERE Referenznummer = @Referenznummer ) ) BEGIN --(2)、出现异常后,直接终止下面的代码,跳转到CATCH代码块中. SELECT 10 / 0 --begin SELECT @@ERROR SELECT 100 IF (@@error <> 0) --此语句在try catch中是捕获不到的。 BEGIN SET @returnValue = 0 END --end END ELSE BEGIN SET @returnValue = 3 END COMMIT TRAN END TRY BEGIN CATCH PRINT 'error' --SET @returnValue = 0 ROLLBACK TRAN END CATCH SELECT @returnValue --RETURN @returnValue
相关文章推荐
- SQL大圣之路笔记——存储过程中含有大量sql时,使用事务处理机制
- 使用BizTalk Server的Sql适配器出现“新事务不能登记到指定的事务处理器中”异常的处理
- 如何使用Transact-SQL进行事务处理[示例]
- 源码-PL/SQL从入门到精通-第十二章-异常处理机制-Part 2
- Pl/SQL结构块分为几部分?Pl/sql中使用DML,事务处理
- SQL2008--SQL语句-存储过程-触发器-事务处理-基本语法-函数
- 如何使用 Transact-SQL 执行事务处理
- 如何正确使用Java异常处理机制
- PHP5的异常处理机制[8]--使用throw关键字
- 使用事务处理SQL数据时,遇到Exception:The transaction manager has disabled its support for remote/network transactions
- 使用子事务(saveponit)时,当子事务抛出异常后,此异常处理掉不继续往外抛, Transaction has been rolled back because it has been marke
- 使用try...catch的处理异常机制
- SQL学习笔记6 视图 存储过程 事务处理
- Java异常处理机制的详细讲解和使用技巧
- 使用事务处理多条SQL语句时,@@error在捣鬼
- 关于合理使用SpringMVC统一异常处理机制以改善代码风格的一些思考
- 一个很好用的DBHelper类(包括使用SQL语句 存储过程 事务 做相关操作) 入门级
- 嵌入SQL中(DB2)异常处理WHENEVER语句的使用
- Java异常处理机制的详细讲解和使用技巧
- oracle 存储过程 异常处理机制