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. 371. Sum of Two Integers -- Avota

    问题描述: Calculate the sum of two integers a and b, but you are not allowed to use the operator + and - ...

  2. Oauth认证简介

    Oauth是什么: 1.Oauth是一种安全认证的协议: 2.Oauth为用户资源的授权提供了一个安全的.开放而又简易的标准: 3.Oauth的授权不会使第三方触及到用户的账号信息(用户名和密码). ...

  3. Java学习----对象与对象之间的关系

    1.依赖 对象之间最弱的一种关联方式,是临时性的关联.代码中一般指由局部变量,函数参数,返回值建立的对于其他对象的调用关系. public class A { // 方法一 public void t ...

  4. phpcms V9利用num++实现多样形式列表标签调用

    在首页或者频道页调用文章列表的时候,经常会使用到左右对称或者每五行出现一条横线的调用形式. 其实代码很简单,利用num++的循环方式,以及{if}{/if}进行样式判断即可.代码如下: {pc:con ...

  5. 熄灯问题 --POJ 2811-ACM

    问题描述 盏灯的状态. 列的灯的状态就不改变. 请你写一个程序,确定需要按下哪些按钮,恰好使得所有的灯都熄灭.根据上面的规则,我们知道: 次按下时所产生的结果.因此,每个按钮最多只需要按下一次: (2 ...

  6. MySql数据库3【优化3】缓存设置的优化

    1.表缓存 相关参数: table_open_cache 指定表缓存的大小.每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容.通过检查峰值时间的状 ...

  7. 最简单理解CGI,FastCGI,WSGI

    CGI规定了如何执行本地脚本技术规范(协议),FastCGI规定了如何远程请求执行脚本的技术规范,WSGI规定了如何请求执行Python脚本的规范. 他们的相同点就是envionment variab ...

  8. Oracle中数字格式的文本化处理

    Select TO_CHAR(123.0233,'FM999,999,90.09') FROM DUAL 1.小数点后面的0指示至少保留1位小数,9表示最多保留两位小数 2.小数点前面的0指示至少保留 ...

  9. VS在Release模式下,难道还可以Debug?

    就是这段代码: int main(int argc, char *argv[]) { QApplication a(argc, argv); cxcxsdee w; w.show(); QString ...

  10. 「Poetize6」Candle

    描述 蜡烛商店中有10种蜡烛,形状分别是0~9这10个数字,不过对于每种蜡烛,商店的存货量仅有一根.另外,忘川沧月已经有了一个"+"形状的蜡烛.忘川沧月想购买一些蜡烛,使得他的家族 ...