create database lession5
go
use lession5
go
create table bank(
customerName char(10),--顾客姓名
currentMoney Money --当前余额
)
go
--添加检查约束 账户余额不能少于1元
alter table bank add constraint CK_currentMoney check(currentMoney>=1)
go
--添加数据
insert into bank values('张三',1000)
insert into bank values('李四',1)
--转账测试 :张三转账1000元给李四
--张三账户少1000,李四多1000
use lession5
go
update bank set currentMoney=currentMoney-1000 where customerName='张三'
update bank set currentMoney=currentMoney+1000 where customerName='李四'
go
--再次查看转账后的结果
select * from bank
go
use lession5
go
--添加测试数据
insert into bank values('三毛',10000)
insert into bank values('小毛',1)
--开始一个事务
begin transaction tran_bank --也可简写begin tran tran_bank
--定义一个用于记录错误的变量
declare @tran_error int
set @tran_error = 0
--在三毛的账户减去
update bank set currentMoney=currentMoney-10000 where customerName='三毛'
set @tran_error = @tran_error + @@error
--在小毛的账户增加
update bank set currentMoney=currentMoney+10000 where customerName='小毛'
set @tran_error = @tran_error + @@error
if @tran_error <> 0
begin
--执行出错,回滚事务
rollback transaction
print '转账失败,交易已取消'
end
else
begin
--没有发现错误,提交事务
commit transaction
print '交易成功,已保存新数据'
end
go
--定义一个名为stuInfo_cursor的可随意滚动的游标
declare stuInfo_cursor cursor scroll for select * from StuInfo
--打开该游标
open stuInfo_cursor
--定义个变量,用于存放游标中读取出来的值
declare @id int
declare @name nvarchar(10)
declare @sex char(2)
declare @classid int
--读取游标的第一条记录行,并存放在变量中
fetch first from stuInfo_cursor into @id,@name,@sex,@classid
--循环读取游标中的记录
print '读取的数据如下:'
while(@@fetch_status = 0)
begin
--用print输出读取的数据
print '学号:'+convert(nvarchar,@id)
+ '姓名:'+@name
+ '性别:'+@sex
+'班级编号:' + convert(nvarchar,@classid)
--读取下一条记录行
fetch next from stuInfo_cursor into @id,@name,@sex,@classid
end
--读取完成后关闭游标
close stuInfo_cursor
--删除游标
deallocate stuInfo_cursor
网友评论