东西:SQL SERVER 2017
第一种:ROW_NUMBER() OVER()体例
把表中的所稀有据都按照一个ROW_NUMBER进行排序,然后查询ROW_NUMBER 10 到20之间的前十笔记录。
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER(ORDER BY LOG_ID ) AS ROWID FROM LOG_SYSTEM
) AS B
WHERE ROWID BETWEEN 10 AND 20
---WHERE ROWID BETWEEN 当前页数-1*条数 AND 页数*条数---
第二种体例:OFFSET FETCH NEXT体例(SQL2012以上的版本才撑持:保举利用 )
利用OFFSET是SQLServer2012新具有的分页功能,本家儿要功能是从第x条数据起头共取y数据。可是其必需根再Order By后面利用,比拟前三种体例加倍便利。
SELECT * FROM LOG_SYSTEM
ORDER BY LOG_ID
OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY
---ORDER BY LOG_ID
OFFSET 页数 ROWS FETCH NEXT 条数 ROWS ONLY ---
--第三种体例:--TOP NOT IN体例 (顺应于数据库2012以下的版本)
先搜出id在1-15之间的数据,紧接着搜出id不在1-15之间的数据,最后将搜出的成果取前十条。
SELECT TOP 10 * FROM LOG_SYSTEM
WHERE LOG_ID NOT IN (SELECT TOP 15 LOG_ID FROM LOG_SYSTEM)
---WHERE ID NOT IN (SELECT TOP 条数*页数 LOG_ID FROM LOG_SYSTEM) ---
--第四种体例:用存储过程的体例进行分页
CREATE PROCEDURE PAGE_DEMO
@TABLENAME VARCHAR(20),
@PAGESIZE INT,
@PAGE INT
AS
DECLARE @NEWSPAGE INT,
@RES VARCHAR(100)
BEGIN
SET @NEWSPAGE=@PAGESIZE*(@PAGE - 1)
SET @RES='SELECT * FROM ' +@TABLENAME+ ' ORDER BY LOG_ID OFFSET '+CAST(@NEWSPAGE AS VARCHAR(10)) +' ROWS FETCH NEXT '+ CAST(@PAGESIZE AS VARCHAR(10)) +' ROWS ONLY'
EXEC(@RES)
END
EXEC PAGE_DEMO @TABLENAME='LOG_SYSTEM',@PAGESIZE=3,@PAGE=5
GO
小结
自我感受第二种体例很是的简单,不冗余因为没有嵌套查询啊,少了Sql语句的嵌套,就少了“视觉上的逻辑”,可是大师必然要切记,这种体例只是适合SqlServer 2012以及更高的版本。由上面的例子可以看出,SqlServer简直挺壮大的,可是若是我们贫乏发现“功能” 的眼睛的话,Sql Server再壮大对我们来说也没有。
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!