SQL 数据库中的 提交事务的疑难问题
如下代码:
create table account
(
name varchar(20) primary key,
balance money not null
check (balance>=1)
)
create table logger ---相当于是日志文件
(
nameFrom varchar(20) not null,
nameTo varchar(20) not null,
num money not null,
time datetime not null
)
insert into account values('aaa',1000)
insert into account values('bbb',1)
declare @totalErr int
set @totalErr=0
begin transaction --开始事务
update account set balance=balance-1000 where name='aaa'
set @totalErr=@totalErr+@@ERROR
update account set balance=balance+1000 where name='bbb'
set @totalErr=@totalErr+@@ERROR
insert into logger values('aaa','bbb',1000,GETDATE()) ----为什么执行后,最后查询此表没有数据显示?
set @totalErr=@totalErr+@@ERROR
if @totalErr>0
begin
rollback transaction--回滚事务
print '回滚事务成功'
end
else
begin
commit transaction--提交事务
end
高手看下,为什么最后查询此表logger 中的数据没哟数据显示?
谢谢回复! SQL 数据库 事务
[解决办法]
执行你的代码有报错:
The UPDATE statement conflicted with the CHECK constraint "CK__account__balance__3C69FB99".
也就是说你的update语句失败了,所以事务回滚,insert也不成功
[解决办法]
因为你的udpate报这个错误:
消息 547,级别 16,状态 0,第 7 行
UPDATE 语句与 CHECK 约束"CK__account__balance__023D5A04"冲突。该冲突发生于数据库"pubs",表"dbo.account", column 'balance'。
语句已终止。
[解决办法]
因为你的表account中有check约束:
create table account
(
name varchar(20) primary key,
balance money not null
check (balance>=1) --这里有check约束
)
那么在执行下面的update语句是,由于name为aaa的记录的balance是1000,那么再减掉1000后,就变成0了,于是不满足上面的balance>=1的约束,所以直接报错,由于是比较严重的额错误,就不会继续下去,直接回滚了:
update account set balance=balance-1000 where name='aaa'
[解决办法]