SQL中存储过程中使用事务,并且加入异常处理机制.
- --存储过程中使用事务,并且加入异常处理机制.
- -- =============================================
- 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 在存储过程中使用事务(转)
本来想自己写一下,后来发现这个写的比我理解的要好,所以直接拽过来了,链接地址:https://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737 ...
- SQL Server存储过程中使用表值作为输入参数示例
这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...
- Sql Server 存储过程中查询数据无法使用 Union(All)
原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...
- ORACLE动态sql在存储过程中出现表或视图不存在的解决方法
Oracle动态sql在存储过程中出现表或视图不存在的解决方法 CREATE OR REPLACE PROCEDURE P_test is strsql varchar2(2000); BEGIN ...
- SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过
存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...
- SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法
本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...
- sql server 存储过程中使用变量表,临时表的分析(续)
最近,我有一朋友,对我说他的数据库中的很多存储过程,执行都是超时.让我替他看看是什么原因.我一看,原来他的存储过程中用了很多的临时表与变量表.于是我跟他说过犹不及. 在存储过程中使用临时表或变量表,使 ...
- sql server 存储过程的(包含事务)方法里面,采用游标循环,批量删除(修改)数据
sqlserver 数据库 1.下面是完整的 在存储过程中 使用游标进行 循环删除的实例(包括存储过程中,事务的应用) 2.有问题的话,欢迎随时讨饶我,相信大家看下注释应该就能明白了,很简单的一个,小 ...
- oracle中存储过程中调用存储过程
存储过程中调用存储过程 create or replace package body PF_Role_Pack is procedure sp_GetPage_Role(pageSize_ in nu ...
随机推荐
- 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 - ...
- Oauth认证简介
Oauth是什么: 1.Oauth是一种安全认证的协议: 2.Oauth为用户资源的授权提供了一个安全的.开放而又简易的标准: 3.Oauth的授权不会使第三方触及到用户的账号信息(用户名和密码). ...
- Java学习----对象与对象之间的关系
1.依赖 对象之间最弱的一种关联方式,是临时性的关联.代码中一般指由局部变量,函数参数,返回值建立的对于其他对象的调用关系. public class A { // 方法一 public void t ...
- phpcms V9利用num++实现多样形式列表标签调用
在首页或者频道页调用文章列表的时候,经常会使用到左右对称或者每五行出现一条横线的调用形式. 其实代码很简单,利用num++的循环方式,以及{if}{/if}进行样式判断即可.代码如下: {pc:con ...
- 熄灯问题 --POJ 2811-ACM
问题描述 盏灯的状态. 列的灯的状态就不改变. 请你写一个程序,确定需要按下哪些按钮,恰好使得所有的灯都熄灭.根据上面的规则,我们知道: 次按下时所产生的结果.因此,每个按钮最多只需要按下一次: (2 ...
- MySql数据库3【优化3】缓存设置的优化
1.表缓存 相关参数: table_open_cache 指定表缓存的大小.每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容.通过检查峰值时间的状 ...
- 最简单理解CGI,FastCGI,WSGI
CGI规定了如何执行本地脚本技术规范(协议),FastCGI规定了如何远程请求执行脚本的技术规范,WSGI规定了如何请求执行Python脚本的规范. 他们的相同点就是envionment variab ...
- Oracle中数字格式的文本化处理
Select TO_CHAR(123.0233,'FM999,999,90.09') FROM DUAL 1.小数点后面的0指示至少保留1位小数,9表示最多保留两位小数 2.小数点前面的0指示至少保留 ...
- VS在Release模式下,难道还可以Debug?
就是这段代码: int main(int argc, char *argv[]) { QApplication a(argc, argv); cxcxsdee w; w.show(); QString ...
- 「Poetize6」Candle
描述 蜡烛商店中有10种蜡烛,形状分别是0~9这10个数字,不过对于每种蜡烛,商店的存货量仅有一根.另外,忘川沧月已经有了一个"+"形状的蜡烛.忘川沧月想购买一些蜡烛,使得他的家族 ...