通用儲存過程 分頁儲存過程

2021-09-08 14:18:27 字數 2869 閱讀 7913

/*

名稱:spall_returnrows

輸入:輸出:

呼叫:exec spall_returnrows 'select  * from 表名', 頁號, 返回記錄數, '主鍵', '排序字段'

spall_returnrows 'select  * from all_categories',2,10,'[id]','[id]'

說明:[百萬級]通用儲存過程.分頁儲存過程..返回指定返回條數、指定頁數的記錄

*/create procedure dbo.spall_returnrows

(@sql nvarchar(4000),

@page int,

@recsperpage int,

@id varchar(255),

@sort varchar(255))as

declare @str nvarchar(4000)

set @str='select   top '+cast(@recsperpage as varchar(20))+' * from ('+@sql+'

) t where t.'+@id+'

not in

(select   top '+cast((@recsperpage*(@page-1)) as varchar(20))+' '+@id+'

from ('+@sql+'

) t9 order by '+@sort+'

) order by '+@sort

print @str

exec sp_executesql @str

go/*

名稱:spall_deletenoneunique

輸入:要查詢的表名和字段列表

輸出:呼叫:

說明:實現千萬級資料的分頁顯示!--可以在5秒內獲取1448萬條記錄裡的第1200頁的100條記錄,雄不?

*/create procedure getrecordfrompage

@tblname      varchar(255),       -- 表名

@fldname      varchar(255),       -- 欄位名

@pagesize     int = 10,           -- 頁尺寸

@pageindex    int = 1,            -- 頁碼

@iscount      bit = 0,            -- 返回記錄總數, 非 0 值則返回

@ordertype    bit = 0,            -- 設定排序型別, 非 0 值則降序

@strwhere     varchar(1000) = ''  -- 查詢條件 (注意: 不要加 where)

asdeclare @strsql   varchar(6000)       -- 主語句

declare @strtmp   varchar(100)        -- 臨時變數

declare @strorder varchar(400)        -- 排序型別

if @ordertype != 0

begin

set @strtmp = "<(select min"

set @strorder = " order by [" + @fldname +"] desc"

endelse

begin

set @strtmp = ">(select max"

set @strorder = " order by [" + @fldname +"] asc"

endset @strsql = "select top " + str(@pagesize) + " * from ["

+ @tblname + "] where [" + @fldname + "]" + @strtmp + "(["

+ @fldname + "]) from (select top " + str((@pageindex-1)*@pagesize) + " ["

+ @fldname + "] from [" + @tblname + "]" + @strorder + ") as tbltmp)"

+ @strorder

if @strwhere != ''

set @strsql = "select top " + str(@pagesize) + " * from ["

+ @tblname + "] where [" + @fldname + "]" + @strtmp + "(["

+ @fldname + "]) from (select top " + str((@pageindex-1)*@pagesize) + " ["

+ @fldname + "] from [" + @tblname + "] where " + @strwhere + " "

+ @strorder + ") as tbltmp) and " + @strwhere + " " + @strorder

if @pageindex = 1

begin

set @strtmp = ""

if @strwhere != ''

set @strtmp = " where " + @strwhere

set @strsql = "select top " + str(@pagesize) + " * from ["

+ @tblname + "]" + @strtmp + " " + @strorder

endif @iscount != 0

set @strsql = "select count(*) as total from [" + @tblname + "]"

exec (@strsql)

go

通用分頁儲存過程

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...

通用分頁儲存過程

通用分頁儲存過程 create proc commonpagination columns varchar 500 要顯示的列名,用逗號隔開 tablename varchar 100 要查詢的表名 ordercolumnname varchar 100 排序的列名 order varchar 50...