選擇不同的前8個類別ID
來自tbl_Product_Products
其中(UserID = 73)和(CategoryID & gt
(選擇最大值(類別id)
從(選擇不同的TOP 16類別id
從tbl_product_products開始,其中userid=73
按類別排序)作為b))
按類別排序
-方法2
從[訂單詳情]中選擇top 10 *
其中orderid & gt全部(從[訂單詳細信息] order by orderid中選擇top 10 orderid)
按訂單id排序
以下是來自CSDN的。
SQL Server存儲過程分頁已經討論了好幾年了,很多朋友都在問我,在此發表壹下自己的看法。
創建表格:
創建表[測試表](
[ID] [int] IDENTITY (1,1)不為空,
[first name][nvarchar](100)整理Chinese_PRC_CI_AS NULL,
[姓氏][nvarchar](100)COLLATE Chinese _ PRC _ CI _ AS NULL,
[Country] [nvarchar] (50)整理中文_PRC_CI_AS NULL,
[註] [nvarchar] (2000)整理中文_PRC_CI_AS NULL
)開[主]
去
插入數據:(2萬,用更多數據測試會更明顯)
在上設置IDENTITY_INSERT TestTable
聲明@i int
set @i=1
而@ i & lt=20000
開始
插入到TestTable([id],名字,姓氏,國家,註釋)值(@i,'名字_XXX ','姓氏_XXX ','國家_XXX ','註釋_XXX ')
set @i=@i+1
結束
將IDENTITY_INSERT TestTable設置為OFF
-
尋呼方案1:(尋呼時不在並選擇頂部)
聲明形式:
選擇TOP 10 *
從測試表
我不在
(選擇前20個id
從測試表
按id排序))
按ID排序
選擇頂部頁面尺寸*
從測試表
我不在
(選擇頂部頁面尺寸*頁面id。
來自表格
按id排序))
按ID排序
-
尋呼方案2:(通過使用ID大於多少並選擇頂部來尋呼)
聲明形式:
選擇TOP 10 *
從測試表
其中(ID & gt
(選擇最大值(id)
從(選擇前20個id
從測試表
按id排序)作為T))
按ID排序
選擇頂部頁面尺寸*
從測試表
其中(ID & gt
(選擇最大值(id)
從(選擇頂部頁面尺寸*頁面id
來自表格
按id排序)作為T))
按ID排序
-
分頁方案3:(使用SQL遊標存儲過程分頁)
創建過程小正格
@ sqlstrnvarchar (4000),-查詢字符串
@ currentpageint,-第n頁
@ pagesizeint-每頁行數
如同
設置nocount on
聲明@P1 int,- P1-p1是遊標的id。
@rowcount int
exec sp _ cursor open @ p 1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
選擇ceiling(1.0 * @ rowcount/@ pagesize)作為總頁數-,@ rowcount作為總行數,@currentpage作為當前頁。
set @ current page =(@ current page-1)* @ pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
設置nocount關閉
其他方案:如果沒有主鍵,可以用臨時表或者方案三,但是效率會低。
建議優化時,增加主鍵和索引會提高查詢效率。
通過SQL查詢分析器,比較顯示出來:我的結論是:
分頁方案二:(使用ID大於what和SELECT TOP分頁)效率最高,需要拼接SQL語句。
分頁方案壹:(用Not In和SELECT TOP分頁)效率較低,需要拼接SQL語句。
分頁方案3(使用SQL遊標存儲過程分頁)效率最低,但最常用。
實際情況,要具體分析。