分享乙個通用的分頁SQL

2022-01-17 22:28:32 字數 2342 閱讀 1459

又很久沒寫部落格,今天記錄乙個sqlserver通用分頁儲存過程(適用於sqlserver2000及以上版本)

1.支援連表

2.支援條件查詢

use [mydb] go

/****** object:  storedprocedure [dbo].[sp_commonpage]   

set quoted_identifier on go

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

create procedure [dbo].[sp_commonpage]   

@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)        -- 臨時變數(查詢條件過長時可能會出錯,可修改100為1000)

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)

go

分享乙個通用資料庫分頁方案

技術架構 web層可以是任意的mvc框架,目前只實現了springmvc和struts的版本 struts版已經在weblogic7下跑通,tomcat5還不行 dao層也沒有任何限制,只要按照範例中的模式來做既可 最終頁面上用乙個標籤來顯示翻頁按鈕等。btw 誰有興趣想寫個webwork版本的,可...

乙個通用分頁類

1 功能 這個通用分頁類實現的功能是輸入頁數 第幾頁 和每頁的數目,就能獲得相應的資料。2 實現原理 分頁的實現通常分為兩種,一種是先把資料全查詢出來再分頁,一種是需要多少查詢多少,這裡使用第二種,所以就需要先實現在dao層能夠查詢一定範圍內的資料,這裡就實現通過id作為鍵值,查詢一定範圍內的資料的...

乙個通用分頁查詢方法

為了簡化開發人員的 想寫乙個通用的分頁查詢方法,為了提交效率,其中有一段是分解hql語句,組成查詢總數的hql語句,實現如下 public paginationsupport findpagebyquery final string hsql,final object values,final in...