当前位置: 首页 > 科技观察

SQLServer基础:TOP、OFFSET-FETCH、SETROWCOUNT使用注意事项

时间:2023-03-15 16:47:43 科技观察

今天给大家介绍TOP、OFFSET-FETCH、SETROWCOUNT使用注意事项,希望对大家有所帮助!1、TOP用法语法格式:TOP(expression)[PERCENT][WITHTIES]expression:返回行数的数值表达式PERCENT:指返回结果集行数的百分比。用法:--从UserInfo数据表中提取20行记录SELECTTOP20*FROMUserInfo;--从UserInfo数据表中提取10%的记录行SELECTTOP10PERCENT*FROMUserInfo;如果表达式指定返回行的数量或百分比,则表达式必须包含在方括号中。用法如下:DECLARE@nASint;SET@n=12SELECTTOP(@n)*FROMUserInfo;注意:当不指定ORDERBY子句时,TOP子句返回的数据行是按物理顺序首先访问的数据行行,逻辑上不一定是前几行。简单的说,这个返回结果是不确定的。即使指定了ORDERBY子句,但指定的排序列中包含重复值,返回的结果也是不确定的。不确定的数据对数据使用没有多大价值。解决列中存在重复值时返回结果不确定的问题,可以使用WITHTIES关键字。该关键字将指定返回包含ORDERBY子句返回的最后一个值的所有行,这将超过expression指定的数量。示例:SELECTTOP2WITHTIESFROMUserInfoORDERBYCreateDate2、OFFSET-FETCH用法SQLServer2012版本引入了对OFFSET-FETCH技术的支持。OFFSET-FETCH过滤通常被视为ORDERBY子句的一部分,通常用于实现顺序页面显示。OFFSET指定跳过的行数,FETCH指定跳过的行数后过滤的行数用法:SELECTUserID,Birthday,Name,AgeFROMUserInfoORDERUserIDOFFSET20ROWSFETCHNEXT15ROWSONLY;注意:使用OFFSET-FETCH的查询必须有一个ORDERBY子句。此外,FETCH子句还必须有一个OFFSET子句。如果不想跳过任何行,而是想使用FETCH过滤,可以使用OFFSET0ROWS来表示。但是,单独使用FETCH意味着跳过指定数量的行并返回查询结果中的所有剩余行。OFFSET-FETCH语法有一些有趣的语言方面需要注意。单数形式ROW和复数形式ROWS可以互换,因此筛选可以用类似英语的直观方式来描述。例如,如果你只想获取一行,如果你指定FETCH1ROWS,虽然这在语法上是有效的,但看起来会很奇怪。因此,可以使用FETCH1ROW格式。这种互换也适用于OFFSET子句。此外,如果您不想跳过任何行(OFFSET0ROWS),您可能会认为“first”比“next”更合适,因此FIRST和NEXT格式可以互换。在支持跳过功能方面,OFFSET-FETCH子句比TOP子句更加灵活。但是OFFSET-FETCH不支持PERCENT和WITHTIES选项,但是TOP支持。由于OFFSET-FETCH是标准的而TOP不是,因此建议使用OFFSET-FETCH作为默认选择,除非您需要TOP支持而OFFSET-FETCH不支持的功能。3.SETROWCOUNT语句SETROWCOUNTn语句限制了结果集的大小。此语句指定在返回指定的n行后停止处理查询。SETROWCOUNT和TOP的区别如下:SETROWCOUNT限制适用于计算ORDERBY后在结果集中生成行。如果指定了ORDERBY,则SELECT语句将在从已排序的值集中选择n行后结束。TOP和OFFSET-FETCH适用于单个SELECT语句。SETROWCOUNT设置将一直有效,直到执行下一个SETROWCOUNT语句。如果执行SETROWCOUNT0,该选项将被关闭。注意:TOP和OFFSET-FETCH的性能优于使用SETROWCOUNT,应尽量避免使用SETROWCOUNT。用法:SETROWCOUNT4;SELECTTOP20*FROMUserInfo;