首页 > 代码库 > SQL Server存储过程中使用事务
SQL Server存储过程中使用事务
今天修改之前一个同事写的代码,发现方法中直接执行了两个sql语句,一个是删除用户,一个是删除该用户的权限。由于数据库数据比较多,导致有时候这个两个sql不能都执行成功,数据库出现了脏数据。
鉴于这个原因,我把两个sql放到了一个存储过程中执行,在存储过程中添加事务,使其要么都执行,要么都不执行。
代码框架如下:
1 CREATE PROCEDURE pro_TrancDemo @backvalue INT OUTPUT 2 AS 3 BEGIN 4 SET NOCOUNT ON; 5 6 BEGIN TRY 7 SET @backvalue = 1; --如果事务没有回滚就返回该值,代表事务执行成功。注意:这句也可以放到BEGIN TRAN t之后第一行,因为事务中出现回滚不会回滚对变量的赋值操作 8 BEGIN TRAN t --开始事务 9 --delete语句110 --delete语句211 --other SQL sentences …………12 COMMIT TRAN t13 END TRY14 BEGIN CATCH15 IF XACT_STATE() <> 016 BEGIN 17 SET @backvalue = 0; --如果事务回滚就返回0,代表事务执行失败.18 ROLLBACK TRAN t;19 END20 END CATCH21 END 22 GO
注释:
XACT_STATE()函数在SQL Server 2005及其之后的版本中可用,该函数返回下列值:
0 : 当前请求没有活动的用户事务
1 : 当前请求有活动的用户事务。请求可以执行任何操作,包括写入数据和提交事务
-1 : 当前请求具有活动的用户事务,但法提交事务或回滚到保存点;它只能请求完全回滚事务
同事给我了另外一种解决方法,可以参考一下:
SQL Server存储过程中使用事务
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。