分页SQL语句
做网站开发的都知道,显示列表项过多时会采取分页。本文主要讨论分页中的SQL语句,仅供参考。
以下是C#中的参数化的SQL语句片段,展示了分页时的情况:
string strSql = @"select top(@num) * from ( select id, c_info_title, count(*) over() AS Total, row_number() over(order by n_is_head, n_order desc, d_list_date desc, id desc) AS num from B_NEWS where n_is_active=1 ) AS T where num>@index"; SqlParameter[] paras ={ new SqlParameter("@num", perPageCount) new SqlParameter("@index", perPageCount*(curPage-1)) };
可以看出,该SQL语句中使用了嵌套查询。内层查询中使用了开窗函数over(),关于开窗函数,可参考文章《sql开窗函数over()用法》,总之,开窗函数能很方便让我们把聚集函数的值放到查询项中。话归正题,上面的SQL语句使用了count(*) over()来查询出总行数,使用row_number() over()来设置行号,其它都是常规查询。
然后是外层查询,使用top()来限定最终查询几条,参数@num传递的就是每页的条数。使用where num>@index来限定外层查询的起始位置,@index也就是当前页第一条的上一条的位置,或者说是当前页的上一页的最后一条的位置,num是内层查询出的行号。
以上就是本次介绍的分页SQL语句,再配合Ajax查询、JS翻页插件,就能实现列表页的翻页了。
接下来我们再说说详情页的SQL语句:
string sql = @"DECLARE @TempTable Table(num int, id int, title nvarchar(200), date varchar(100), c_info_content ntext insert into @TempTable select row_number() over(order by n_is_head, n_order desc, d_list_date desc, id desc) AS num, id, c_info_title AS title, CONVERT(varchar(100), d_list_date, 111) AS date, c_info_content from B_NEWS where n_is_active=1 and c_kind_num=@kind DECLARE @num int set @num=(select top(1) num from @TempTable where id=@id) select *, (select top(1) id from @TempTable where num=@num-1) AS id_up, (select top(1) id from @TempTable where num=@num+1) AS id_down, (select top(1) title from @TempTable where num=@num-1) AS title_up, (select top(1) title from @TempTable where num=@num+1) AS title_down, (select top(1) date from @TempTable where num=@num-1) AS date_up, (select top(1) date from @TempTable where num=@num+1) AS date_down from @TempTable where id=@id"; SqlParameter[] paras = { new SqlParameter("@id", id), new SqlParameter("@kind", curKind) };
该语句首先声明了一个表变量@TempTable用于存放查询的中间结果(听说表变量会有性能损失,可考虑用公用表(with as),不过公用表限制比较大,试过了,不合适)。然后将带行号的查询结果插入表变量中。第三部分是声明了一个变量@num用于存放当前要查询记录的行号。最后就是复用表变量,分别查询出当前记录数据、上一条相关信息、下一条相关信息。参数@id就是待查询记录的ID。另外,此处的”上一条”指在列表页中排列在更上面的一条,所以查询时为行号减一。
全剧终!谢谢观赏!
原创文章,转载请注明: 转载自 独立观察员(dlgcy.com)
本文链接地址: [分页SQL语句](https://dlgcy.com/sql-page/)
关注微信公众号 独立观察员博客(DLGCY_BLOG) 第一时间获取最新文章
2条评论