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

存储过程与事务

时间:2016-05-22 20:09:13      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

USE BOOK 
GO
--删除表
IF OBJECT_ID(‘tb_Money‘) IS NOT NULL
DROP TABLE tb_Money
GO
--创建表
CREATE TABLE tb_Money(
 Id INT IDENTITY(1,1) PRIMARY KEY,
 Name VARCHAR(50) NOT NULL,
 MyMoney DECIMAL NOT NULL
)
--插入数据
INSERT INTO dbo.tb_Money (  Name, MyMoney )VALUES  (‘刘备‘, 100 )
INSERT INTO dbo.tb_Money (  Name, MyMoney )VALUES  (‘关羽‘, 20 )


--事务开始
BEGIN TRAN Tran_Money
DECLARE @tran_error INT;
SET @tran_error = 0;
DECLARE @FromPeple VARCHAR(50);
DECLARE @ToPeple VARCHAR(50);
DECLARE @HowMoney DECIMAL;
SET @FromPeple = ‘关羽‘;
SET @ToPeple = ‘刘备‘;
SET @HowMoney = 30;
BEGIN TRY
IF (((SELECT MyMoney FROM dbo.tb_Money WHERE Name = @FromPeple) - @HowMoney) < 0)
  BEGIN
       PRINT ‘余额不足‘;
       SET @tran_error = @tran_error + 1;
  END
ELSE
  BEGIN
      UPDATE dbo.tb_Money SET MyMoney = MyMoney - 30 WHERE Name = @FromPeple ;
	  SET @tran_error = @tran_error + @@ERROR; 
	  UPDATE dbo.tb_Money SET MyMoney = MyMoney + 30 WHERE Name = @ToPeple ;
	  SET @tran_error = @tran_error + @@ERROR; 
  END
END TRY
BEGIN CATCH
  PRINT ‘出现异常,错误编号:‘ + CONVERT(VARCHAR,ERROR_NUMBER()) + ‘错误消息:‘ + ERROR_MESSAGE()
  SET @tran_error = @tran_error + 1
END CATCH
IF(@tran_error > 0)
BEGIN
   ROLLBACK TRAN;--
   PRINT ‘转账失败,取消交易‘
END
ELSE
BEGIN
  COMMIT TRAN;
  PRINT ‘转账成功‘
END



--转账存储过程
IF OBJECT_ID(‘Pro_TranMoney‘) IS NOT NULL
DROP PROCEDURE Pro_TranMoney 
GO 
CREATE PROCEDURE Pro_TranMoney
@FromPeple VARCHAR(50),
@ToPeple VARCHAR(50),
@HowMoney DECIMAL
AS
BEGIN
--存储过程中的事务
--事务开始
BEGIN TRAN Tran_Money
DECLARE @tran_error INT;
SET @tran_error = 0;
BEGIN TRY
IF (((SELECT MyMoney FROM dbo.tb_Money WHERE Name = @FromPeple) - @HowMoney) < 0)
  BEGIN
       PRINT ‘余额不足‘;
       SET @tran_error = @tran_error + 1;
  END
ELSE
  BEGIN
      UPDATE dbo.tb_Money SET MyMoney = MyMoney - 30 WHERE Name = @FromPeple ;
	  SET @tran_error = @tran_error + @@ERROR; 
	  UPDATE dbo.tb_Money SET MyMoney = MyMoney + 30 WHERE Name = @ToPeple ;
	  SET @tran_error = @tran_error + @@ERROR; 
  END
END TRY
BEGIN CATCH
  PRINT ‘出现异常,错误编号:‘ + CONVERT(VARCHAR,ERROR_NUMBER()) + ‘错误消息:‘ + ERROR_MESSAGE()
  SET @tran_error = @tran_error + 1
END CATCH
IF(@tran_error > 0)
BEGIN
   ROLLBACK TRAN;--
   PRINT ‘转账失败,取消交易‘
END
ELSE
BEGIN
  COMMIT TRAN;
  PRINT ‘转账成功‘
END
END

--测试转账存储过程
EXEC dbo.Pro_TranMoney @FromPeple = ‘刘备‘,@ToPeple = ‘关羽‘, @HowMoney = 30

  

存储过程与事务

标签:

原文地址:http://www.cnblogs.com/linhongquan/p/5517518.html

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