MSSQL之事务的用法
2016-02-24 17:08
309 查看
IF OBJECT_ID('bankInfo') IS NOT NULL
DROP TABLE bankInfo
GO
--银行卡信息表
CREATE TABLE bankInfo
(
uId VARCHAR(18) NOT NULL PRIMARY KEY,--卡号
uName VARCHAR(20), --卡主姓名
uMoney MONEY --卡中余额
)
GO
INSERT INTO bankInfo VALUES('9559901','张三',1)
INSERT INTO bankInfo VALUES('9559902','李四',1000)
INSERT INTO bankInfo VALUES('9559903','王五',800)
INSERT INTO bankInfo VALUES('9559904','赵六',50)
INSERT INTO bankInfo VALUES('9559905','赵明',5)
SELECT * FROM bankInfo
------begin transaction---------开始事务
SET IMPLICIT_TRANSACTIONS ON
DECLARE @myerror INT --用于存储错误号
SET @myerror=0
SET @myerror=@myerror+(select count(*) from bankInfo WHERE uId='9559902' and uMoney<800) --如果帐号余额小于800,则将error+1
UPDATE bankInfo SET uMoney=uMoney-800 WHERE uId='9559902'
SET @myerror=@myerror+@@ERROR --如果产生错误,则将错误号累加
UPDATE bankInfo SET uMoney=uMoney+800 WHERE uId='9559901'
SET @myerror=@myerror+@@ERROR --如果产生错误,则将错误号累加
IF @myerror>0 --如果执行过程出错
BEGIN
PRINT '转账失败,正准备回滚事务!'
ROLLBACK TRANSACTION
END
ELSE --如果过程中没有出现问题
BEGIN
PRINT '转账成功,准备提交事务!'
COMMIT TRANSACTION
END
------end transaction---------结束事务
PRINT '转账后的余额'
SELECT * FROM bankInfo
DROP TABLE bankInfo
GO
--银行卡信息表
CREATE TABLE bankInfo
(
uId VARCHAR(18) NOT NULL PRIMARY KEY,--卡号
uName VARCHAR(20), --卡主姓名
uMoney MONEY --卡中余额
)
GO
INSERT INTO bankInfo VALUES('9559901','张三',1)
INSERT INTO bankInfo VALUES('9559902','李四',1000)
INSERT INTO bankInfo VALUES('9559903','王五',800)
INSERT INTO bankInfo VALUES('9559904','赵六',50)
INSERT INTO bankInfo VALUES('9559905','赵明',5)
SELECT * FROM bankInfo
------begin transaction---------开始事务
SET IMPLICIT_TRANSACTIONS ON
DECLARE @myerror INT --用于存储错误号
SET @myerror=0
SET @myerror=@myerror+(select count(*) from bankInfo WHERE uId='9559902' and uMoney<800) --如果帐号余额小于800,则将error+1
UPDATE bankInfo SET uMoney=uMoney-800 WHERE uId='9559902'
SET @myerror=@myerror+@@ERROR --如果产生错误,则将错误号累加
UPDATE bankInfo SET uMoney=uMoney+800 WHERE uId='9559901'
SET @myerror=@myerror+@@ERROR --如果产生错误,则将错误号累加
IF @myerror>0 --如果执行过程出错
BEGIN
PRINT '转账失败,正准备回滚事务!'
ROLLBACK TRANSACTION
END
ELSE --如果过程中没有出现问题
BEGIN
PRINT '转账成功,准备提交事务!'
COMMIT TRANSACTION
END
------end transaction---------结束事务
PRINT '转账后的余额'
SELECT * FROM bankInfo
相关文章推荐
- mysql压缩包的安装
- SQL复习总结——DQL,聚合函数与分组
- MongoDB 优化器profile
- SQL中 char varchar和nvarchar的区别
- MS SQL 小总结
- sql入门基本语法语句数据的操作(增删改查)
- iOS SQLite和NoSQL数据库
- 【架构】How To Use HAProxy to Set Up MySQL Load Balancing
- because of many connection errors; unblock with 'mysqladmin flush-hosts
- Should you install or clone Oracle Home?
- jdbc更新oracle时间字段问题
- 关系型数据库「SQLite 3.11.0」发布
- IOS Mac上查看iPhone上的SQlite数据库
- Oracle之自定义函数
- SqlServer入门学习
- MySql避免重复插入记录的几种方法
- oracle数据文件被删除没备份恢复
- mysql创建存储过程
- Xtrabackup安装与配置
- MySQL设置当前时间为默认值的方法