事物及exec
事物3要出不多讲:
1.BEGIN TRANSACTION--开启事务
2.COMMIT TRANSACTION--事务执行
3.ROLLBACK TRANSACTION--事务回滚
俩总捕捉事物的方式
一:记录错误号:这种方式
1.这种方式的代码在错误发生后会一直执行下去。
ALTER PROC [dbo].[trans]
@num NVARCHAR()
AS
BEGIN TRANSACTION--开启事务
SELECT * FROM trantest(TABLOCKX)
--动态执行语句
DECLARE @sql NVARCHAR(),@error INT
SET @error=
PRINT '开始测试1'
--INSERT INTO trantest(num) values(@num)
SET @sql='INSERT INTO trantest(num) values(@num)'
EXECUTE sp_executesql @sql,N'@num nvarchar(20) ',@num
SET @error=@error+@@error--接收错误号 PRINT @error
IF @error=
BEGIN
PRINT '执行事务'
COMMIT TRANSACTION--事务执行
END
ELSE
BEGIN
PRINT '回滚事务'
ROLLBACK TRANSACTION--事务回滚
END
GO
二:try catch 方式捕捉,这种方式
1.在发生错误后,会直接调整到catch语句,后面的语句就不再执行
CREATE PROC [dbo].[TryTrans]
@num NVARCHAR()
AS
BEGIN TRANSACTION
DECLARE @sql NVARCHAR(),@error INT
SET @error=
BEGIN TRY
--动态执行语句 PRINT '开始测试1'
--INSERT INTO trantest(num) values(@num)
SET @sql='INSERT INTO trantest(num) values(@num)'
EXECUTE sp_executesql @sql,N'@num nvarchar(20) ',@num
PRINT '异常外' END TRY
BEGIN CATCH
PRINT '出现异常,错误编号:' + convert(varchar,error_number()) + ',错误消息:' + error_message()
SET @error = @error +
END CATCH IF(@error > )
BEGIN
--执行出错,回滚事务
ROLLBACK TRAN;
PRINT '转账失败,取消交易!';
END
ELSE
BEGIN
--没有异常,提交事务
COMMIT TRAN;
PRINT '转账成功!';
END GO
上面两种调用方式:EXEC trans @num=123456789011
上面2个语句都用到了exec动态执行语句,@@error为全局的,经过测试exec动态执行的错误号也都能捕捉到。
事物及exec的更多相关文章
- Redis常用数据类型和事物以及并发
Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- Redis快速入门详解
Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...
- mysql并发控制之数据库锁
1.mysql和redis的区别 mysql是一种关系型数据库,数据会最终存储在磁盘上.而redis是一种非关系型的nosql数据库,以key-value的形式存储数据,将数据存储在内存.从性能上来说 ...
- redis事务与关系型数据库事务比较
redis 是一个高性能的key-value 数据库.作为no sql 数据库redis 与传统关系型数据库相比有简单灵活.数据结构丰富.高速读写等优点. 本文主要针对redis 在事物方面的处理与传 ...
- 阶段总结-Java基础-超进阶
Gitee项目地址:https://gitee.com/zc10010/java_interview_guide/tree/master/知识点话术 项目叫话术,但是我觉得作为知识点学习是挺不错的. ...
- 大数据学习day34---spark14------1 redis的事务(pipeline)测试 ,2. 利用redis的pipeline实现数据统计的exactlyonce ,3 SparkStreaming中数据写入Hbase实现ExactlyOnce, 4.Spark StandAlone的执行模式,5 spark on yarn
1 redis的事务(pipeline)测试 Redis本身对数据进行操作,单条命令是原子性的,但事务不保证原子性,且没有回滚.事务中任何命令执行失败,其余的命令仍会被执行,将Redis的多个操作放到 ...
- Redis中的简单事物以及消息订阅发布
Redis支持简单的事物,但是没有mysql的Innodb支持的那么的完善 我们接下来看一下Redis和Mysql的事物的一个对比: MySQL Redis 开启 start transactio ...
- php数据访问:pdo用法、事物回滚功能和放sql注入功能
PDO: 一.含义: 数据访问抽象层 二.作用 通过PDO能够访问其它的数据库 三. 用法: 1.造对象 ① $pdo ...
随机推荐
- Tensorflow梯度下降应用
import tensorflow as tfimport numpy as np #使用numpy生成随机点x_data = np.random.rand(100)y_data = x_data*0 ...
- 【摘自张宴的"实战:Nginx"】nginx模块开发
Nginx的模块不能够像Apache那样动态的加载,所以模块都要预先编译进Nginx的二进制可执行文件中. Nginx的模块有三种角色: 1. Handler(处理模块) 用于处理Http请求 ...
- wpf仿qq边缘自动停靠,支持多屏
wpf完全模仿qq边缘自动隐藏功能,采用鼠标钩子获取鼠标当前状态,在通过当前鼠标的位置和点击状态来计算是否需要隐藏. 以下是实现的具体方法: 一.鼠标钩子实时获取当前鼠标的位置和点击状态 /// &l ...
- GCD 学习(三)Main&Global Dispatch Queue
摘录自:http://zhuyanfeng.com/archives/3066 Main Dispatch Queue是在主线程中执行任务的Dispatch Queue.因为主线程只有1个,所以Mai ...
- JavaWeb_静态导入、自动拆箱/装箱
静态导入用于简化程序对类静态属性和方法的调用. 语法 import static 包名.类名.静态属性|静态方法|* 例如 import static java.lang.System.out imp ...
- Netty的Channel
Channel是一个网络端口连接,或者是可以进行读,写,链接,绑定端口的组件的连接. Channel就是一个链接,它提供了如下的功能. 1:获取当前链接的状态 2:配置当前链接参数 3:进行read ...
- Linux下面的IO模型
1. Linux下的五种I/O模型 阻塞I/O模型: 一直阻塞 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空 ...
- 解决java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext问题
使用ClassPathXmlApplicationContext加载项目时, ClassPathXmlApplicationContext context = new ClassPathXmlAppl ...
- jquery ajax 分页2
/* * 分页 $("#divPager").flexipager * 2015.03.17 */ //初始化列表默认属性 (function($) { $.addFlex = f ...
- linq 事务处理
首先引用使名空间: using System.Transactions; 然后写入代码: using (TransactionScope ts = new TransactionScope()) { ...