本篇是订单管理的第三篇,此次将原来的sql语句改成存储过程,后台只负责输入几个参数就可以了。想法很天真啊,原来以为直接把sql语句简单放过去就可以了,但好多细节没有考虑清楚,比如日常总结问题(7)中的存储过程里如果使用‘(单引号),这些原来都没有考虑。
分布梳理下这个改造成存储过程的过程
一、SQL优化
原来的sql语句里将套餐信息和其他信息一起搜索出来,觉得会影响查询质量,于是改成了下面的语句
SELECT price,quantity,total,status,remark ,w1.orderid,w1.receiver1, shopconect
FROM sales w1,
( SELECT TOP 20 row_number() OVER (ORDER BY orderid DESC) n, orderid,
'国家:'+w3.country+',套餐天数:'+CAST( w3.days as varchar)+',套餐内容:'+w3.simcontent+',充值参加价:'
+CAST( w3.simprice as varchar)+'RMB' as shopconect
from simshop w3,sales
where sales.orderflag=0 and sales.simid=w3.simID ) w2
WHERE w1.orderid = w2.orderid AND w2.n >0
其中w2.n>0的0是页码,top 20的20是每张页的大小,这个就是每20个数据为一页的第一页的数据,20=paindex+pa,n>paindex
int pa = AspNetPager1.PageSize;
int paindex = pa * (index - 1);
这样就可以达到第几页数据了
PS:在优化的时候,百度到一个sql语句,参考http://www.jb51.net/article/35213.htm(当时是为了编写存储过程,因为下面的sql语句有一个模板的存储过程,所以看了看)
SELECT * FROM ARTICLE w1
WHERE ID in
(
SELECT top 30 ID FROM
(
SELECT top 1030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC
) w ORDER BY w.YEAR ASC, w.ID ASC
)
ORDER BY w1.YEAR DESC, w1.ID DESC
原来也是想改成这个语句的,条件都适配好了,结果发现它是查出第1030的前30的,如果我想查出第二页的30个数据,我不会了,希望有看到这个的大神们帮忙解决下,我一看&