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

原创 2015年07月08日 16:06:01

 今天老板叫我查询未来三个月的产品剩余情况,因为我们的产品是可以根据日期预定购买的 而每天的产品数量都是一样的。就像你去电影院看电影,电影院有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类  类里面的属性你需要和临时表里的字段属性相对应,因为你接收到的是一个集合数据


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


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

相关文章推荐

SQl Server2008,2005附加过多次数据库都失败(讨论)

求教: 我用的SQl Server2008附加过多次数据库都失败,错误一致,将文件放置根目录下一样附加不上。 错误信息: 执行Transact-SQL语句或批处理时发生了异常。 无法打开物...

多线程多次查询数据生成一个文件——解决内存溢出

1,需求背景:        内存溢出的问题最初调试时,发现是生成Excel时用StringBuilder变量缓存数据,当数据过大时,导致内存溢出(解决);之后再次测试,发现由于取数据时涉及到多表查询...

同时发送了多次ajax请求,且都是异步的,怎样拿取某一次ajax请求的返回数据。

一:需求 要实如下输入框可支持模糊查询,查询字符串:“nick”。 二:实现原理 给输入框绑定keyup事件,然后ajax请求,带输入的参数去后台数据库拿出数据再返回到页面。 三:分析 1)...

MySQL学习笔记_12_Linux下C++/C连接MySQL数据库(二) --返回数据的SQL

 Linux下C++/C连接MySQL数据库(二) --返回数据的SQL 引:     返回数据的SQL是指通过查询语句从数据库中取出满足条件的数据记录 从MySQL数据库值哦功能检索数...

oracle 数据库的管理工具 PL/SQL_Developer 的简易使用 与Java 连接并查询显示出数据

解决问题:               1. pl/sql 的简单使用和Java连接oracle数据库               2.Java连接成功,但是while循环里面就是查询不出数据来的...

java之查询sql server数据库数据

package test; import java.util.*; import javax.swing.*; import java.sql.*; public class DataBaseDe...

SQL性能优化中的底层概念,时间复杂度,算法和数据结构,数据库组成,查询优化和表关联原理.

原文地址: http://blog.jobbole.com/100349/ 一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大...

C#实现对SQL数据库中的表的查询、添加、修改、删除数据

经常用到的对象有:SqlConnection,SqlAdapter,SqlCommand、Dataset、DataGrid和DataReader等,以SqlConnection,SqlAdapter,...

SQL Server 学习笔记④ 查询某个数据所在数据库表中的哪个字段上出现过的存储过程

--2008查找某数据库中的列是否存在某个值 create proc spFind_Column_In_DB ( @type int,--类型:1为文字类型、2为数值类型 @str nvarcha...

大数据量高并发的数据库优化,sql查询优化

一、数据库结构的设计      如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。所以,在一个系统开始实施之前,完备的数据库模型...
  • n1n4m5
  • n1n4m5
  • 2014年05月21日 21:32
  • 531
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于如何在sql数据库里查询多次返回数据的做法
举报原因:
原因补充:

(最多只允许输入30个字)