码迷,mamicode.com
首页 > 其他好文 > 详细

事物及exec

时间:2016-09-05 23:28:45      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

事物3要出不多讲:

1.BEGIN TRANSACTION--开启事务

2.COMMIT TRANSACTION--事务执行

3.ROLLBACK TRANSACTION--事务回滚

 

俩总捕捉事物的方式

一:记录错误号:这种方式

1.这种方式的代码在错误发生后会一直执行下去。
ALTER PROC [dbo].[trans]
  @num NVARCHAR(20)
  AS
  BEGIN TRANSACTION--开启事务
   SELECT * FROM trantest(TABLOCKX)
   --动态执行语句
   DECLARE @sql NVARCHAR(200),@error INT 
   SET @error=0
   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=0
   BEGIN 
        PRINT 执行事务
        COMMIT TRANSACTION--事务执行
   END 
   ELSE    
   BEGIN
        PRINT 回滚事务
        ROLLBACK TRANSACTION--事务回滚
   END 
GO

二:try catch 方式捕捉,这种方式

1.在发生错误后,会直接调整到catch语句,后面的语句就不再执行

CREATE PROC [dbo].[TryTrans]
  @num NVARCHAR(20)
  AS
        BEGIN TRANSACTION
          DECLARE @sql NVARCHAR(200),@error INT 
        SET @error=0
  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 + 1
  END CATCH

IF(@error > 0)
    BEGIN
        --执行出错,回滚事务
        ROLLBACK TRAN;
        PRINT 转账失败,取消交易!;
    END
ELSE
    BEGIN
        --没有异常,提交事务
        COMMIT TRAN;
        PRINT 转账成功!;
    END
  
  GO

上面两种调用方式:EXEC trans @num=123456789011

 

上面2个语句都用到了exec动态执行语句,@@error为全局的,经过测试exec动态执行的错误号也都能捕捉到。

事物及exec

标签:

原文地址:http://www.cnblogs.com/zhuyapeng/p/5843902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!