标签:
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