動軟SQL儲存過程分頁

2021-06-06 19:52:00 字數 4853 閱讀 1220

c#中呼叫

///

/// 分頁獲取資料列表

///

public dataset getlist(int pagesize,int pageindex,string strwhere)

;parameters[0].value = "tsys_userrole";

parameters[1].value = "fid";

parameters[2].value = pagesize;

parameters[3].value = pageindex;

parameters[4].value = 0;

parameters[5].value = 0;

parameters[6].value = strwhere; 

return dbhelpersql.runprocedure("up_getrecordbypage",parameters,"ds");

}儲存過程如下:

1,------------------------------------

--用途:分頁儲存過程(對有主鍵的表效率極高)

--說明:

------------------------------------

create procedure [dbo].[up_getrecordbypage]

@tblname      varchar(255),       -- 表名

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

@pagesize     int = 10,           -- 頁尺寸

@pageindex    int = 1,            -- 頁碼

@isrecount    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 @isrecount != 0

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

exec (@strsql)

2,------------------------------------

--用途:支援任意排序的分頁儲存過程

--說明:

------------------------------------

create procedure [dbo].[up_getrecordbypageorder]

@tblname varchar(255),   -- 表名

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

@orderfldname varchar(255), -- 排序欄位名

@statfldname varchar(255), -- 統計欄位名

@pagesize int = 10,   -- 頁尺寸

@pageindex int = 1,   -- 頁碼

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

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

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

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

declare @strtmp varchar(100)   -- 臨時變數(查詢條件過長時可能會出錯,可修改100為1000)

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

if @ordertype != 0

begin

set @strtmp = '<(select min'

set @strorder = ' order by [' + @orderfldname +'] desc'

end

else

begin

set @strtmp = '>(select max'

set @strorder = ' order by [' + @orderfldname +'] asc'

endset @strsql = 'select top ' + str(@pagesize) + ' ' + @fldname + ' from ['

+ @tblname + '] where [' + @orderfldname + ']' + @strtmp + '(['

+ @orderfldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['

+ @orderfldname + '] from [' + @tblname + ']' + @strorder + ') as tbltmp)'

+ @strorder

if @strwhere != ''

set @strsql = 'select top ' + str(@pagesize) + ' ' + @fldname + ' from ['

+ @tblname + '] where [' + @orderfldname + ']' + @strtmp + '(['

+ @orderfldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['

+ @orderfldname + '] 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) + ' ' + @fldname + ' from ['

+ @tblname + ']' + @strtmp + ' ' + @strorder

endif @isrecount != 0

set @strsql = @strsql+' select count(1) as total from [' + @tblname + ']'

if @strwhere!=''

set @strsql = @strsql+' where ' + @strwhere

exec (@strsql)

動軟 mysql 分頁 動軟分頁儲存過程

1,用途 支援任意排序的分頁儲存過程 說明 create procedure dbo up getrecordbypageorder tblname varchar 255 表名 fldname varchar 255 顯示欄位名 orderfldname varchar 255 排序欄位名 sta...

動軟分頁儲存過程

動軟.net 分頁儲存過程up getrecordbypage 2012 03 26 16 03 1,用途 支援任意排序的分頁儲存過程 說明 create procedure dbo up getrecordbypageorder tblname varchar 255 表名 fldname var...

sql 儲存過程分頁

create proc myx prpagerecordset querystr nvarchar 1000 keyfield nvarchar 200 pagesize int,pagenumber int as begin declare sqltext as nvarchar 4000 dec...