您现在的位置是:亿华云 > 域名
如何在SQL Server查询中实现高效分页
亿华云2025-10-04 01:05:44【域名】5人已围观
简介经常写SQL查询脚本的朋友,很可能会遭遇分页查询的问题。在MSSQL2000及以前的版本中,分页的写法大多采用纯Top嵌套方式,写法比较复杂、而且效率并不理想。从MSSQL2005开始,SQL Ser
经常写SQL查询脚本的查询朋友,很可能会遭遇分页查询的中实问题。在MSSQL2000及以前的现高效分版本中,分页的查询写法大多采用纯Top嵌套方式,写法比较复杂、中实而且效率并不理想。现高效分
从MSSQL2005开始,查询SQL Server提供了一个内置函数ROW_NUMBER,中实这是现高效分一个非常神奇的函数。
从MSSQL2012开始,查询SQL Server提供了offset方法进行分页。中实使用offset startPage rows fetch next pageSize rows only 方式进行分页。现高效分
今天我们就谈谈ROW_NUMBER和offset的查询语法和在分页中的应用。

ROW_NUMBER实现对结果集的输出进行编号。 具体来说,现高效分返回结果集分区内行的序列号,每个分区的***行从 1 开始。
ROW_NUMBER ( ) OVER ( [ PARTITION BY 字段 , ] order_by_clause )PARTITION BY:将 FROM 子句生成的结果集划分为应用 ROW_NUMBER 函数的分区。 value_expression 指定对结果集进行分区所依据的列。站群服务器 如果未指定 PARTITION BY,则此函数将查询结果集的所有行视为单个组。order_by_clause: 子句可确定在特定分区中为行分配*** ROW_NUMBER 的顺序。 order by 子句是必选项。返回值:bigint。结果集分区内行的序列号。offset的含义及语法定义offset是order by的子句,主要用来限定返回的行数,用来做分页也是很合适的。只是从MSSQL2012才开始支持。语法结构如下:
FETCH { NEXT } { integer_constant | fetch_row_count_expression } { ROWS } ONLYfetch_row_count_expression 可以是变量、参数或常量标量子查询。 在使用子查询时,它无法引用在外部查询范围中定义的任何列。也就是说,它无法与外部查询相关联。
结合到分页,语法语法:
offset startPage rows fetch next pageSize rows only其中起始页面:startPage=(@page-1)*@rows,页面大小:pageSize=@rows
演示数据准备为了说明方便,云服务器提供商我们准备一些演示数据,这是一个简单的业务销售表,字段只有业务员、销售区域和销售额,如下:
declare @sale table( FName nvarchar(50), FDistrict nvarchar(50), FAmount decimal(28,10) ); insert into @sale values (张三,北京,20000), (张三,上海,50000), (张三,深圳,40000), (张三,广州,30000), (李四,北京,30000), (李四,上海,50000), (李四,深圳,40000), (李四,广州,10000), (王二,北京,70000), (王二,上海,10000), (王二,深圳,60000), (王二,广州,20000), (马六,北京,80000), (马六,上海,20000), (马六,深圳,70000), (马六,广州,60000)准备演示数据
使用ROW_NUMBER分页比如我们希望按照业务员+销售区域排序后,每4条记录一页显示,写法如下:
declare @pagesize int =4;--每页记录数 declare @pagenum int =1;--第几页 select v.* from (select row_number() over(order by FName,FDistrict) as FRowIndex,* from @sale) as v where v.FRowIndex between @pagesize*(@pagenum-1)+1 and @pagenum*@pagesize;分页查询
ROW_NUMBER函数在SQL中属于热名称(即刚定的名称FRowIndex),只可以出现在select子句中,需要放在子查询中。也可以先对子查询做好定义后面再直接引用,语法如下:
declare @pagesize int =4;--每页记录数 declare @pagenum int =1;--第几页 with saledata as ( select row_number() over(order by FName,FDistrict) as FRowIndex,* from @sale ) select * from saledata where FRowIndex between @pagesize*(@pagenum-1)+1 and @pagenum*@pagesize;分页查询
ROW_NUMBER来做分页查询,经过反复应用测试,效率还是很高的。完整的测试脚本参看下图:

重复的代码部分不再赘述,在查询时要注意,offset是Order By的子句,不能独立存在。语法结构如下:
select * from @sale order by FName,FDistrict offset (@pagenum-1)*@pagesize rows fetch next @pagesize rows only返回的结果与使用row_number是一致的。完整的测试脚本参看下图:

希望对您有所帮助!
很赞哦!(7353)
上一篇: ICANN 规章禁止转移已经被记录或者在60天前内转移的域名。
下一篇: 四、长串数字域名
相关文章
- 为什么大家都选优质域名?到底存在着什么好处?
- 在更换域名后,并不是就万事大吉了,我们需要将旧域名做301重定向到新域名上,转移旧域名的权重到新域名上。
- 为什么现在中文域名觉得好?使用中文域名有什么好处?
- Status、Creation Date、Expiration Date
- 其次,一般域名注册有一个获取密码的按钮,域名注册商点击后会向您发送密码。在得到域名注册商发送的密码后,将其传输到域名服务提供商网站,然后输入密码,此时域名呈现申请状态。提交申请后,原注册人通常会向您发送一封电子邮件,询问您是否同意转让。此时,您只需点击同意转移按钮,域名注册商就可以成功转移。
- 审核通过的域名将显示在域名竞拍页面,并进入正式拍卖期,买家可以在拍卖周期内出价,加价幅度与拍卖保证金说明,点此查看。
- 域名和网址一样吗?域名和网址有什么区别?
- 解析之后一般在十分钟内生效,如果没有生效可以联系域名服务商进行沟通。
- tk域名是什么域名?新手对tk域名有什么看法?
- 尽量不要在域名中出现特殊字符,这样的域名很容易导致访问者输入错误,同时给人留下不专业的印象,降低网站的可信度,并流失大量潜在客户。
热门文章
站长推荐
公司在注册域名时还需要确保邮箱的安全性。如果邮箱不安全,它只会受到攻击。攻击者可以直接在邮箱中重置密码并攻击用户。因此,有必要注意邮箱的安全性。
审核通过的域名将显示在域名竞拍页面,并进入正式拍卖期,买家可以在拍卖周期内出价,加价幅度与拍卖保证金说明,点此查看。
便宜域名使用如何?小白可以买到便宜域名吗?
3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
一下域名,看有没有显示出你所解析的IP,如果有,就说明解析是生效的;如果没有,就说明解析是不生效的。
4、域名传输时,取决于域名原始用户的邮箱是否有效,以及他是否将密码发送到此邮箱。
四、长串数字域名
为啥修改dns服务器?dns服务器与域名有何联系?