1. --存储过程中使用事务,并且加入异常处理机制.
  2. -- =============================================
  3. CREATE PROCEDURE [dbo].[UP_Orders_Import]
  4. AS
  5. BEGIN
  6. BEGIN TRAN --开启事务
  7. BEGIN TRY
  8.  
  9. SELECT 1/0
  10.  
  11. COMMIT TRAN --提交事务
  12. END TRY
  13. BEGIN CATCH
  14. DECLARE
  15. @ErrorMessage NVARCHAR(4000) ,
  16. @ErrorNumber INT ,
  17. @ErrorSeverity INT ,
  18. @ErrorState INT ,
  19. @ErrorLine INT ,
  20. @ErrorProcedure NVARCHAR(200) ;
  21.  
  22. SELECT
  23. @ErrorNumber=ERROR_NUMBER(),@ErrorSeverity=ERROR_SEVERITY(),
  24. @ErrorState=ERROR_STATE(),@ErrorLine=ERROR_LINE(),
  25. @ErrorProcedure=ISNULL(ERROR_PROCEDURE(),'-') ;
  26. SELECT
  27. @ErrorMessage=N'Error %d, Level %d, State %d, Procedure %s, Line %d, '
  28. +'Message: '+ERROR_MESSAGE() ;
  29. RAISERROR
  30. (
  31. @ErrorMessage,
  32. @ErrorSeverity,
  33. 1,
  34. @ErrorNumber, -- parameter: original error number.
  35. @ErrorSeverity, -- parameter: original error severity.
  36. @ErrorState, -- parameter: original error state.
  37. @ErrorProcedure, -- parameter: original error procedure name.
  38. @ErrorLine -- parameter: original error line number.
  39. ) ;
  40. ROLLBACK TRAN --回滚事务
  41. END CATCH
  42. END

  sql事务注意点:

  1. DECLARE @Referenznummer NVARCHAR(MAX)
  2. SET @Referenznummer = '934590-AE1023-1'
  3.  
  4. BEGIN TRAN
  5. BEGIN TRY
  6.  
  7. DECLARE @returnValue INT
  8. SET @returnValue = 11110
  9.  
  10. --(1)、变量在事务中是不会进行回滚的;默认值虽然是11110
  11. SET @returnValue = 1
  12.  
  13. IF (
  14. NOT EXISTS ( SELECT 1
  15. FROM tbOrder
  16. WHERE Referenznummer = @Referenznummer )
  17. )
  18. BEGIN
  19.  
  20. --(2)、出现异常后,直接终止下面的代码,跳转到CATCH代码块中.
  21. SELECT 10 / 0
  22. --begin
  23. SELECT @@ERROR
  24. SELECT 100
  25. IF (@@error <> 0) --此语句在try catch中是捕获不到的。
  26. BEGIN
  27. SET @returnValue = 0
  28. END
  29. --end
  30. END
  31. ELSE
  32. BEGIN
  33. SET @returnValue = 3
  34. END
  35. COMMIT TRAN
  36. END TRY
  37. BEGIN CATCH
  38. PRINT 'error'
  39. --SET @returnValue = 0
  40. ROLLBACK TRAN
  41. END CATCH
  42.  
  43. SELECT @returnValue
  44. --RETURN @returnValue

  

SQL中存储过程中使用事务,并且加入异常处理机制.的更多相关文章

  1. sql 在存储过程中使用事务(转)

    本来想自己写一下,后来发现这个写的比我理解的要好,所以直接拽过来了,链接地址:https://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737 ...

  2. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  3. Sql Server 存储过程中查询数据无法使用 Union(All)

    原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...

  4. ORACLE动态sql在存储过程中出现表或视图不存在的解决方法

    Oracle动态sql在存储过程中出现表或视图不存在的解决方法 CREATE OR REPLACE PROCEDURE P_test is strsql varchar2(2000); BEGIN   ...

  5. SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过

    存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...

  6. SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  7. sql server 存储过程中使用变量表,临时表的分析(续)

    最近,我有一朋友,对我说他的数据库中的很多存储过程,执行都是超时.让我替他看看是什么原因.我一看,原来他的存储过程中用了很多的临时表与变量表.于是我跟他说过犹不及. 在存储过程中使用临时表或变量表,使 ...

  8. sql server 存储过程的(包含事务)方法里面,采用游标循环,批量删除(修改)数据

    sqlserver 数据库 1.下面是完整的 在存储过程中 使用游标进行 循环删除的实例(包括存储过程中,事务的应用) 2.有问题的话,欢迎随时讨饶我,相信大家看下注释应该就能明白了,很简单的一个,小 ...

  9. oracle中存储过程中调用存储过程

    存储过程中调用存储过程 create or replace package body PF_Role_Pack is procedure sp_GetPage_Role(pageSize_ in nu ...

随机推荐

  1. 2 - Annotations标注

    下面是TestNG标注和参数的一个快速预览 @BeforeSuite 被标注的方法会在这个套件的所有测试执行之前执行  @AfterSuite 被标注的方法会在这个套件的所有测试执行之后执行 @Bef ...

  2. jQuery选择器种类整理

    选择器概念 jQuery选择器是通过标签.属性或者内容对HTML内容进行选择,选择器运行对HTML元素组或者单个元素进行操作. jQuery选择器使用$符号,等同于jquery,例如: $(“li”) ...

  3. javascript 函数声明问题

    (function(){ //运行正常 test1(); function test1() { console.log('123'); }; })() (function(){ //出错,test2未 ...

  4. WPF WebBrowser 不可见问题的解析[转]

    问题概述: 1.在Xaml中加入WebBrowser(不论是WPF中的控件,还是Winform中的控件) 2.设置Window Background="Transparent" A ...

  5. Day13 SQLAlchemy连表操作和堡垒机

    一.数据库操作 1.创建表.插入数据和一对多查询 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author: wanghuafeng from sq ...

  6. C#执行oracle返回游标类型的存储过程

    存储过程代码为: create or replace procedure proc_test(pCursor OUT pak_pub.ut_cursor) AS begin -- 使用游标 open ...

  7. [转] Java 8的新特性

    简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...

  8. ios中关于delegate(委托)的使用心得

    ios中关于delegate(委托)的使用心得 分类: iOS开发2012-05-15 10:54 34793人阅读 评论(9) 收藏 举报 iosuiviewtimerinterfaceprinti ...

  9. shell条件测试

    文件状态测试-b filename : 当filename 存在并且是块文件时返回真(返回0)-c filename : 当filename 存在并且是字符文件时返回真-d pathname : 当p ...

  10. gulp配置browserify多入口

    需要 var es = require('event-stream'); gulp.task('browserify', function(){ var files = [ { fpath: './j ...