亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

Sql server分頁的總結

2024-08-31 00:53:38
字體:
來源:轉載
供稿:網友

可能很多人在開始學sql分頁時候都是在使用TOP NOT IN的方式??赡艿浆F在還有很多人在用這種分頁的方式進行。但是有人發現問題了么?

 

SELECT TOP 10 * FROM dbo.Orders WHERE OrderID NOT IN (SELECT TOP 20 OrderID FROM dbo.Orders ORDER BY RequiredDate) ORDER BY dbo.Orders.RequiredDate

SELECT TOP 10 * FROM dbo.Orders WHERE OrderID NOT IN (SELECT TOP 30 OrderID FROM dbo.Orders ORDER BY RequiredDate) ORDER BY dbo.Orders.RequiredDate


 

   OrderID編號為 10788兩條語句有重復

 

  這是我用NORTHWND 測試的TOP方式的分頁,大家也可以測試下,這兩條語句查詢出來的結果會有重復。測試如果orderby 的列如果有重復的話那么這樣分頁出來的數據就會有重復存在。不管是倒序還是正序都會出現。如果有人有興趣的話可以試試下面這條。

  

SELECT TOP 10 * FROM dbo.Orders WHERE OrderID NOT IN (SELECT TOP 160 OrderID FROM dbo.Orders ORDER BY RequiredDate DESC) ORDER BY dbo.Orders.RequiredDate DESC

SELECT TOP 10 * FROM dbo.Orders WHERE OrderID NOT IN (SELECT TOP 170 OrderID FROM dbo.Orders ORDER BY RequiredDate DESC) ORDER BY dbo.Orders.RequiredDate DESC

 

  OrderID 編號為10880兩條語句有重復

 

  很多人都懷疑是語句哪里寫錯了或這數據有問題。我用的是微軟官方的northwnd庫,應該不會存在數據的問題。那么我語句有問題么?

 

  以上是初學或者習慣使用了,那么我們來實現另一種在 sqlserver2000里的實現。很多人都說都換 sqlserver2005了干嘛還拿sqlserver2000來說事。我覺得只要有人在用那么問題就會一直存在就要提出解決。

 

  那么我們繼續看sqlserver2000的臨一種寫法,表變量來做。我想很多人也都在使用這樣的方法。

 

DECLARE @PAGETEMP TABLE
(

__ROW_NUM INT IDENTITY(1,1),

__TID INT

)

INSERT INTO @PAGETEMP(__TID) SELECT TOP 30 OrderID FROM dbo.Orders  order by RequiredDate

SELECT [@PAGETEMP].__ROW_NUM,* FROM Orders,@PAGETEMP WHERE dbo.Orders.OrderID= [@PAGETEMP].__TID AND [@PAGETEMP] .__ROW_NUM>20 AND [@PAGETEMP].__ROW_NUM<=30

 

 

首先建立一個帶自增字段的表變量 (__ROW_NUM) ,然后把對應分頁表的主鍵插入該臨時表 (__TID),這個臨時表就把查詢表的主鍵字段根據查詢條件進行了重新的自增排序。那么下一步就是根據這個重新排序好的表變量進行與查詢表關聯。得到想返回的行數。表變量分頁和05的分頁方式很像。都是根據查詢內容得到一個帶有自增序號的臨時表,然后得到需要的行數。

 

  繼續看另一種Sqlserver2000分頁,這樣的方法也可以解決上面的重復問題。但是給排序帶來了局限性。

 

SELECT TOP 10 * FROM [Orders] WHERE [Orders].[OrderID]>(
SELECT MAX([__T].[OrderID]) FROM
(SELECT TOP 20 [Orders].[OrderID] AS [OrderID] FROM [Orders] ORDER BY [Orders].[OrderID]) [__T])
ORDER BY [Orders].[OrderID]

  

  首先找到前20條數據找到最大的那一條編號。排除這20條記錄找到大于這寫記錄的前十條記錄。很容易看明白。這個必須是查詢表有自增編號。而且按這個編號排序進行分頁,有了很大的局限性。那如果倒序的話就是min和小于來過濾數據。

 

  

SELECT TOP 10 * FROM [Orders] WHERE [Orders].[OrderID]<(
SELECT MIN([__T].[OrderID]) FROM
(SELECT TOP 20 [Orders].[OrderID] AS [OrderID] FROM [Orders] ORDER BY [Orders].[OrderID] DESC) [__T])
ORDER BY [Orders].[OrderID] DESC

 

  

  最后我們來看一下sqlserver2005的分頁語句,用到 ROW_NUMBER OVER 兩個關鍵字

  

WITH [__T] AS (
SELECT TOP 30 *,ROW_NUMBER() OVER  (ORDER BY [Orders].OrderID) AS [__Pos] FROM [Orders]
)
SELECT * FROM [__T] WHERE [__T].[__Pos]>20 AND [__T].[__Pos]<=30

 

 

  OVER 這里設置排序列。ROW_NUMBER() OVER (ORDER BY [Orders].OrderID) AS [__Pos]為我們建立了自增列,查詢的時候只需要返回我們需要的行號就行。這個和表變量的形式很相像。性能方面也提高了很多。

 

  以上就是我對分頁作出的總結,主要是想說下sqlserver2000的TOP NOT IN 這種分頁方式,所以以后大家要用Sqlserver2000的話請使用后面2種方式。在新的NSun中默認是sqlserver2005的分頁,如果你是sqlserver2000則變為了表變量的方式。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清欧美一区二区三区| 国产成人在线播放| 欧美精品videossex性护士| 爽爽爽爽爽爽爽成人免费观看| 国外成人在线播放| 中日韩午夜理伦电影免费| 日韩中文字幕网站| 一本色道久久88综合亚洲精品ⅰ| 日韩欧美在线视频免费观看| 精品国内亚洲在观看18黄| 一区二区国产精品视频| 日韩欧美在线观看| 日韩中文字幕不卡视频| 91av在线播放| 欧美精品在线看| 亚洲高清av在线| 日韩美女视频中文字幕| 日本韩国欧美精品大片卡二| 中文字幕不卡在线视频极品| 久久夜色精品国产欧美乱| 欧美天堂在线观看| 另类天堂视频在线观看| 欧美激情国内偷拍| 日韩免费在线观看视频| 亚洲视频在线观看| 亚洲色在线视频| 欧美黑人xxxⅹ高潮交| 欧美激情一级二级| 亚洲激情免费观看| 青草热久免费精品视频| 欧美激情一区二区三区高清视频| 国产一区二区三区久久精品| 少妇高潮久久久久久潘金莲| 亚洲美女av电影| 97在线看福利| 欧美性xxxxxxx| 欧美精品在线观看91| 91亚洲人电影| 亚洲一区二区三| 亚洲自拍偷拍第一页| 国产亚洲在线播放| 亚洲国内精品在线| 1769国内精品视频在线播放| 成人激情电影一区二区| 亚洲人在线视频| 亚洲人成网站色ww在线| 亚洲精品一区中文字幕乱码| 日韩欧美国产视频| 日韩二区三区在线| 国产一区深夜福利| 亚洲成人精品视频在线观看| 日韩av影院在线观看| 精品久久久中文| 高清日韩电视剧大全免费播放在线观看| 精品亚洲一区二区三区| 日韩av中文字幕在线播放| 一区二区欧美激情| 国内精品视频一区| 夜夜嗨av色综合久久久综合网| 久久免费在线观看| 3344国产精品免费看| 日韩av在线网页| 精品偷拍各种wc美女嘘嘘| 91精品久久久久| 亚洲成色999久久网站| 久久久久99精品久久久久| 这里只有精品在线播放| 国产精品中文字幕久久久| 日韩av有码在线| 91久久国产婷婷一区二区| 欧美午夜片欧美片在线观看| 欧美视频裸体精品| 久久成人免费视频| 亚洲精品在线91| 91色中文字幕| 亚洲自拍偷拍第一页| 日韩激情av在线播放| 国产一区二区久久精品| 欧美美女15p| 日韩小视频在线| 亚洲风情亚aⅴ在线发布| 国产在线不卡精品| 久久精品夜夜夜夜夜久久| 国产一区二中文字幕在线看| 日av在线播放中文不卡| 久久精品男人天堂| 92裸体在线视频网站| 91久久久久久久久久久| 亚洲成人网在线| 人人爽久久涩噜噜噜网站| 久久99精品久久久久久噜噜| 亚洲老头同性xxxxx| 成人免费观看网址| 久久精品国产电影| 亚洲免费视频观看| 欧美日本在线视频中文字字幕| 伊人伊成久久人综合网小说| 欧美麻豆久久久久久中文| 久久天天躁狠狠躁夜夜爽蜜月| 日本在线精品视频| 日韩视频第一页| 亚洲影院色无极综合| 91在线视频免费| 日韩中文在线视频| 日韩免费中文字幕| 国产日韩欧美日韩| 国产日本欧美一区二区三区| 欧美成人激情视频| 国产做受高潮69| 午夜免费在线观看精品视频| 国产999精品久久久| 青青青国产精品一区二区| 国模精品视频一区二区三区| 国产三级精品网站| 国产欧美va欧美va香蕉在线| 亚洲成人中文字幕| 久久综合免费视频| 秋霞av国产精品一区| 国产69精品99久久久久久宅男| 夜色77av精品影院| 欧美壮男野外gaytube| 久久久久久国产精品久久| 国产69精品99久久久久久宅男| 日韩av一区二区在线观看| 欧美性xxxxxx| 亚洲精品在线看| 国产网站欧美日韩免费精品在线观看| 91精品国产91久久久久久吃药| 久久99精品国产99久久6尤物| 国产高清在线不卡| 青青草精品毛片| 久久精品国产亚洲精品2020| 国产精品黄色av| 日韩视频免费观看| 亚洲精品小视频| 欧美成人精品不卡视频在线观看| 日韩成人在线观看| 亚洲视频视频在线| 国产人妖伪娘一区91| 国产精品久久久久久久久借妻| 日韩精品在线免费观看视频| 精品高清一区二区三区| 久久亚洲国产精品成人av秋霞| 91精品久久久久久久久久| 成人在线观看视频网站| 国产一区二区三区毛片| 久久精品美女视频网站| 日韩最新免费不卡| 欧美重口另类videos人妖| 亚洲最大的免费| 日韩久久精品电影| 国产日韩中文在线| 国产xxx69麻豆国语对白| 精品调教chinesegay| 欧美高清自拍一区| 中文字幕久热精品视频在线| 国产精品欧美激情在线播放| 久久久久久午夜| 日韩美女在线看| 久久影视三级福利片| 91大神在线播放精品| 国产一区欧美二区三区| 69国产精品成人在线播放| 在线精品国产欧美|