关于如何在sql数据库里查询多次返回数据的做法

 今天老板叫我查询未来三个月的产品剩余情况,因为我们的产品是可以根据日期预定购买的 而每天的产品数量都是一样的。就像你去电影院看电影,电影院有100个座位,我提前订票,那么今天的剩余座位 和明天的是不冲突的,但是剩余可订的座位你要显示给用户看啊 ,是不是。相信你在美团网之类购买电影票的都知道流程。

   但是呢 你应该怎么把未来三个月的数据全都查出来呢 ?

      你不可能直接在客户端写90条sql查询语句吧!这不科学啊  是不是,那么老板教我的我也就分享出来,有不足或有更好的建议请多多指教


这里给出存储过程的源代码

  use databaseName
go
createproc [dbo].[sp_getwhileloop]//创建存储过程
 @productid as bigint  //需要传进来的参数
as
declare @i as integer
declare @date as datetime
declare @num as int
declare @stklvl as int
declare @stk as int
declare @isEn as varchar



set @i = 0
set @date = getdate();

--这里创建一个虚拟的表 待会需要存数据
create table #tempdate
(orderdate smalldatetime,
havestock nvarchar(2))


--后三个月的天数 //这里主要是要循环的次数  
while (@i < datediff(dd , getdate(), dateadd(mm, 3,getdate())))
begin
set @i = @i + 1--当@i大于三个月的天数了就不会进来再执行了
set @date = dateadd(day, 1, @date)--这是循环一次天数就会+1
set @num=(select count(*) from torderdata as o,mproduct as p  where 
       convert(varchar(10),o.enddate,120)>=convert(varchar(10),getdate()+@i,120)
  and o.productid=p.productid and p.productid=@productid)--这是我要在表中获取到的数据1


  set @stklvl = ( select  top 1 p.stksafetylvl
 from torderdata as o,mproduct as p  where 
      convert(varchar(10),o.enddate,120)>=convert(varchar(10),getdate()+@i,120)
 and o.productid=p.productid and p.productid=@productid  ) --这是我要在表中获取到的数据


 set @stk = ( select top 1 p.StkLvl
 from torderdata as o,mproduct as p  where 
      convert(varchar(10),o.enddate,120)>=convert(varchar(10),getdate()+@i,120)
 and o.productid=p.productid and p.productid=@productid )--这是我要在表中获取到的数据3

--这里的条件判断也是我要赋值返回去的值
 if(@stk -@num>20)
 begin
 set @isEn='Y'
 end
 if(@stk -@num<=20 and @stk -@num>0)
 begin
 set @isEn='N'
 end


--循环一次之后需要的数据该有的都有了 把需要的数据按照你上面创建虚拟的表插入进去
insert into #tempdate (orderdate, havestock) values (@date, @isEn)


set nocount on;



end 

--最后你调用这个存储过程这里会把所有数据 (90条)返回给你
select * from #tempdate 

--最后删除你创建的临时表
drop table #tempdate 



你在调用时 需要自己写一个model类  类里面的属性你需要和临时表里的字段属性相对应,因为你接收到的是一个集合数据


这样,就能解决你的客户端的性能问题了  不过这里牺牲了服务端,但我们的服务端有那么强大   


希望你有更好的建议,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aamzon SP API DEV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值