以前用.net寫分頁儲存過程時老是一張表就要寫乙個procedure.很忙煩.後來有空就整合了一下,做了乙個通用的sql分頁儲存,支援多表聯合查詢分頁.寫的不好的地方,希望大鳥們多多指導.使的查詢速度更快.
sqlpager儲存過程
alter proc [dbo].[sqlpager] (
@strgetfields varchar(1000) = '*', -- 需要返回的列
@orderfldname varchar(255)='', -- 排序的欄位名
@pagesize int = 10, -- 頁尺寸
@pageindex int = 1, -- 頁碼
@docount int = 1 output, --查詢到的記錄數
@ordertype bit = 0, -- 設定排序型別, 非 0 值則降序
@strwhere varchar(500) = '' -- 查詢條件 (注意: 不要加 where) )
asdeclare @strsql nvarchar(4000) -- 主語句
declare @strtmp varchar(110) -- 臨時變數
declare @strorder varchar(300) -- 排序型別
if @strwhere != ''
set @strsql = 'select @docount=count(*) from ' + @tblname + ' where '+@strwhere
else
set @strsql = 'select @docount=count(*) from ' + @tblname
exec sp_executesql @strsql,n'@docount int out',@docount out
--以上**的意思是如果@docount傳遞過來的不是0,就執行總數統計。以下的所有**都是@docount為0的情況
set @strsql='';
if @ordertype != 0
begin
set @strtmp = '<(select min'
set @strorder = ' order by [' + @orderfldname +'] desc'--如果@ordertype不是0,就執行降序,這句很重要!
endelse
begin
set @strtmp = '>(select max'
set @strorder = ' order by [' + @orderfldname +'] asc'
endif @pageindex = 1
begin
if @strwhere != ''
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from ' + @tblname + ' where ' + @strwhere + ' ' + @strorder
else
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from '+ @tblname + ' '+ @strorder--如果是第一頁就執行以上**,這樣會加快執行速度
endelse
begin--以下**賦予了@strsql以真正執行的sql**
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' 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) +' '+@strgetfields+ ' from '
+ @tblname + ' where [' + @orderfldname + ']' + @strtmp + '(['
+ @orderfldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['
+ @orderfldname + '] from ' + @tblname + ' where ' + @strwhere + ' '
+ @strorder + ') as tbltmp) and ' + @strwhere + ' ' + @strorder
endexec (@strsql)
sqlhelper類中寫執行儲存過程 這是我的資料庫操作類.方法有點老,還是三層架構.(mvc也應該差不多.我還木有試試.)
///
/// 分頁(儲存過程) 用法例如下:
///
/// 需要返回的列
/// 主鍵
/// 排序的欄位名
/// 頁尺寸
/// 頁碼
/// 查詢到的記錄數
/// 設定排序型別, desc、asc
/// 查詢條件 (注意: 不要加 where)
///
public static datatable dbpager(
string tblname,
string strgetfields,
string pkeyfldname,
string orderfldname,
int pagesize,
int pageindex,
out int docount,
string ordertype,
string strwhere)
分頁儲存過程 分頁儲存過程
分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...
分頁的儲存過程
alter procedure sql conn sort tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 頁尺寸 pageindex int 頁碼 doc...
儲存過程的分頁!!
create proc up gettopiclist a strforumid varchar 50 a intpageno int a intpagesize int as 定義區域性變數 declare intbeginid int declare intendid int declare i...