考慮了好久,一直想不好用什麼方案好。
綜合了各種方法寫了自己的分頁,準備在其他過程中呼叫。
create procedure selectpagedsql
(@sql nvarchar(512),
@indexfield nvarchar(100),
@pagesize int=10,
@pageindex int=1,
@sort nvarchar(128)=@indexfield,
@totalcount int=0 output)as
declare @strsql nvarchar(1024)
set @strsql='select * from
(select top '+str(@pagesize)+' * from
(select top '+str(@pagesize*@pageindex)+' * from
('+@sql+') as t0
order by '+@indexfield+' asc) as t1
order by '+@indexfield+' desc) as t2
order by ' +@sort
+'set nocount on
select @totalcount=count(*) from ('+@sql+') as t0'
exec sp_executesql
@strsql,
n'@totalcount int=0 output',
@totalcount=@totalcount output
go經過測試,發現乙個問題
在寫這個的時候,一直拿不準要用id>max(id)還是直接top n,不知道哪種更快。
現在發現直接top是不行的,因為這樣如果要的頁面超出了表的範圍,這樣還是會得到記錄的。也就是說這個是不可能出現沒有記錄的情況。所以,還是要改為max的方法。
別人有寫了乙個max的,但是他的輸入引數不好,要指定tablename,我這個可以指定sql。速度上我這個慢了一點點,等我改用max看看是不是因為top的原因。
通用儲存過程 分頁儲存過程
名稱 spall returnrows 輸入 輸出 呼叫 exec spall returnrows select from 表名 頁號,返回記錄數,主鍵 排序字段 spall returnrows select from all categories 2,10,id id 說明 百萬級 通用儲存過...
通用分頁儲存過程
create procedure sp page strtable varchar 50 表名 strcolumn varchar 50 按該列來進行分頁 intcoltype int,strcolumn列的型別,0 數字型別,1 字元型別,2 日期時間型別 intorder bit,排序,0 順序...
通用分頁儲存過程
set quoted identifier on goset ansi nulls off go declare p1 int set p1 null exec sp pageview tbname n v question list fieldkey n id pagecurrent 3,page...