sql server 游标的简单使用

--订单号:orderNum
--商品名称:XXXX	X个数	单价
--总金额:XX			实付:XX	找零:
--支付时间:XXXXX		付款方式:可记录

CREATE PROCEDURE [dbo].[ZCPrint]
@orderNum int
as

--获取支付信息
declare @total float--总金额
declare @pay float--实付
declare @tip float--找零
declare @payTime datetime--支付时间
select @total=total,@pay=pay,@tip=tip,@payTime=payTime from moneyShow where orderNum=@orderNum 
--获取每种商品的名称,单价,个数
declare @gClass char(20)
declare @gName char(10)--商品名称
declare @gNum int--每类商品的个数
declare @price float--每类商品的单价

----使用游标读取数据
declare reader cursor for
select bigGood.goodsClass,avg(smlGoods.price)单价,count(*)个数 from sales,bigGood,smlGoods 
where sales.goodsID=smlGoods.goodsID and smlGoods.goodsClass=bigGood.goodsClass
and sales.orderNum=1 group by bigGood.goodsClass;

open reader;--打开游标

WHILE @@FETCH_STATUS=0 --判断FETCH语句是否执行成功,
--使用这种方法只能只能有效读一次,第二次全局变量@@FETCH_STATUS=0就变成不等于0了,导致循环直接退出

BEGIN

--FETCH NEXT FROM @varCursor --读取游标变量中的数据
fetch reader into @gClass,@price,@gNum--将游标中的数据读到变量里面
select @gName=gName from bigGood where goodsClass=@gClass
print('商品名称:'+@gName+'×'+str(@gNum)+'    单价'+str(@price))
END

CLOSE reader --关闭游标

DEALLOCATE reader; --释放游标

print('                超市小票')
print('总金额:'+str(@total)+'	实付:'+str(@pay)+'    找零'+str(@tip))
--这这里浮点型转换成字符串有精度损失。
print('支付时间:'+ CONVERT(varchar(100),@payTime , 102)+'    付款方式:未开发')

昨天找BUG忘写今早一早补上!!!下次一定不拖到最后写!!

发布了49 篇原创文章 · 获赞 18 · 访问量 1427

猜你喜欢

转载自blog.csdn.net/qq_44099721/article/details/103626301