[笔记][MSSQL]在2008版本中的分页技巧

今天要介绍的是SQL的分页技巧,首先先介绍在MSSQL2012版中新增的分页语法,实务上主要应用在加载DataTable的时候,配合上页数,让网页不会每一次都查询全部的资料,导致效能变差。

以下使用北风资料库的[Customers]做测试:
http://img2.58codes.com/2024/20106935uN5iFMWQ2M.jpg

一、使用OFFSET ROWS

SELECT *FROM Customers--如果要使用分页语法,一定要加上排序,不然会出错。ORDER BY CustomerID --这一行语法是指「略过」前5行,列出从第6行开始到最后一笔资料。OFFSET 5 ROWS

结果会如下:
http://img2.58codes.com/2024/20106935G9HA7gFv4L.jpg

Function:
1.OFFSET intA ROWS
此函数会略过前intA笔资料行,从第intA+1笔开始列到最后一笔。

二、使用OFFSET intA ROWS搭配FETCH NEXT intB ROWS ONLY

SELECT *FROM Customers--如果要使用分页语法,一定要加上排序,不然会出错。ORDER BY CustomerID --这一行语法是指「略过」前2行,列出从第3行开始的8笔资料。OFFSET 2 ROWS FETCH NEXT 8 ROWS ONLY

结果会如下:
http://img2.58codes.com/2024/20106935rAT58OECZM.jpg

Function:
1.OFFSET intA ROWS FETCH NEXT intB ROWS ONLY
此函数会略过前intA笔资料行,从第intA+1笔开始列出intB笔资料。

以上分页语法的使用方法,但是此语法是在2012版本中才出现的,如果是在2008等版本要使用分页时,可以用以下方式:

三、使用ROW_NUMBER()搭配OVER(ORDER BY AAA)

SELECT *FROM(--先用ROW_NUMBER()替每笔资料设定编号SELECT ROW_NUMBER() OVER(ORDER BY CustomerID) rowNumber,*FROM Customers) myTable--再找出编号大于2,且小于等于2+8的资料WHERE rowNumber>2 AND rowNumber<=2+8

结果会是和第二种方式一样:
http://img2.58codes.com/2024/20106935yHRSuXAk3v.jpg

说明一下这种方式的应用:
第一步用ROW_NUMBER()搭配OVER(ORDER BY AAA)替每笔资料设定编号。
第二步把他包成一个table,因为如果直接把ROW_NUMBER()产生的栏位放进WHERE里面会出错。
第三步再最外层使用WHERE,找出编号大于2,且小于等于2+8的资料行,这样的结果就和从2到8行一样。

以上,如果有问题或观念错误的地方,麻烦留言指教了!谢谢各位!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章