東西: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 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!