事务就是负责把一系列操作看做一个独立的逻辑单元,这些操作要么同时成功,要么同时失败。下面是一个经典的例子:
createprocedure TransferMoeny ( @FromAccountNovarchar(50),-- 转出账号 @ToAccountNovarchar(50),--转入账号 @MoneyCountmoney--转账金额) as--判断账号是否存在ifexists (select1from 帐户表 where 账号 =@FromAccountNo) begin ifexists (select1from 帐户表 where 账号 =@ToAccountNo) begin --判断转出金额是否大于当前余额 if (select 当前余额 from 帐户表 where 账号 =@FromAccountNo) >=@MoneyCount begin --开始转账 begintransaction insertinto[存取记录表] ([账号],[存取类型], [存取金额]) values(@FromAccountNo, -1,@MoneyCount) if@@error<>0 begin rollbacktransaction--发生错误则回滚事务,无条件退出l return end insertinto[存取记录表] ([账号],[存取类型], [存取金额]) values(@ToAccountNo, 1,@MoneyCount) if@@error<>0 begin rollbacktran return end committransaction--两条语句都完成,提交事务 end else raiserror ('转账金额不能大于该账号的余额',16,1) end else raiserror ('转入账号不存在',16,1)
endelse raiserror ('转出账号不存在',16,1)
endelse raiserror ('转出账号不存在',16,1)