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 ...
随机推荐
- 2 - Annotations标注
下面是TestNG标注和参数的一个快速预览 @BeforeSuite 被标注的方法会在这个套件的所有测试执行之前执行 @AfterSuite 被标注的方法会在这个套件的所有测试执行之后执行 @Bef ...
- jQuery选择器种类整理
选择器概念 jQuery选择器是通过标签.属性或者内容对HTML内容进行选择,选择器运行对HTML元素组或者单个元素进行操作. jQuery选择器使用$符号,等同于jquery,例如: $(“li”) ...
- javascript 函数声明问题
(function(){ //运行正常 test1(); function test1() { console.log('123'); }; })() (function(){ //出错,test2未 ...
- WPF WebBrowser 不可见问题的解析[转]
问题概述: 1.在Xaml中加入WebBrowser(不论是WPF中的控件,还是Winform中的控件) 2.设置Window Background="Transparent" A ...
- Day13 SQLAlchemy连表操作和堡垒机
一.数据库操作 1.创建表.插入数据和一对多查询 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author: wanghuafeng from sq ...
- C#执行oracle返回游标类型的存储过程
存储过程代码为: create or replace procedure proc_test(pCursor OUT pak_pub.ut_cursor) AS begin -- 使用游标 open ...
- [转] Java 8的新特性
简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...
- ios中关于delegate(委托)的使用心得
ios中关于delegate(委托)的使用心得 分类: iOS开发2012-05-15 10:54 34793人阅读 评论(9) 收藏 举报 iosuiviewtimerinterfaceprinti ...
- shell条件测试
文件状态测试-b filename : 当filename 存在并且是块文件时返回真(返回0)-c filename : 当filename 存在并且是字符文件时返回真-d pathname : 当p ...
- gulp配置browserify多入口
需要 var es = require('event-stream'); gulp.task('browserify', function(){ var files = [ { fpath: './j ...