儲存過程萬能分頁

来源:互联网 发布:淘宝6.9.0 编辑:程序博客网 时间:2024/05/22 05:31

 

 


/****** 物件:  預存程序 dbo.Pro_A_CommGetRecordByPage    指令碼日期: 2007/8/1 上午 09:43:00 ******/

 


create     PROCEDURE  [dbo].[Pro_A_CommGetRecordByPage] 
@tblName varchar(255), -- 表名 
@talFldName varchar(500)='*',--表內部所有的欄位名
@fldName varchar(255), -- 主键字段名 
@PageSize int = 10-- 页尺寸 
@PageIndex nvarchar(10= '1'-- 页码 
@IsReCount bit = 0-- 返回记录总数, 非 0 值则返回 
@OrderType bit = 0-- 设置排序类型, 非 0 值则降序 
@strWhere varchar(1000= '' -- 查询条件 (注意: 不要加 where) 
AS 

declare @strSQL varchar(7000-- 主语句 
declare @strTmp varchar(1000-- 临时变量 
declare @strOrder varchar(400-- 排序类型 

if @OrderType != 0        --根據OrderType類型決定排序號的方式
begin               
set @strTmp = '<(select min' 
set @strOrder = ' order by [' + @fldName +'] desc' 
end 
else 
begin 
set @strTmp = '>(select max' 
set @strOrder = ' order by [' + @fldName +'] asc' 
end 


set @strSQL = 'select top ' + str(@PageSize+' '+@talFldName+ '  from ['              --根據where的條件是否為空添加條件 
+ @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+' '+@talFldName+ '  from ['                 
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize+ ' [' 
+ @fldName + '] from [' + @tblName + '] where 1=1  ' + @strWhere + ' ' 
+ @strOrder + ') as tblTmp) and 1=1 ' + @strWhere + ' ' + @strOrder 

if @PageIndex = 1 
begin 
set @strTmp ='' 
if @strWhere != '' 
set @strTmp = ' where 1=1  ' + @strWhere 

set @strSQL = 'select top ' + str(@PageSize+' '+@talFldName+ '  from [' 
+ @tblName + ']' + @strTmp + ' ' + @strOrder 
end 

exec (@strSQL