支持任意排序的分页存储过程

      从网上找了一个分页存储过程,在使用的过程中出现对非主键排序查询时,查不到数据,根据sql2005

的特点修改了其bug,已经添加性能测试(2008-10-27)。 

 

支持任意排序的分页存储过程支持任意排序的分页存储过程存储过程
IF OBJECT_ID(N'[dbo].[pro_GetRecordByPageOrder1]'IS NOT NULL 
    
DROP PROCEDURE [dbo].[pro_GetRecordByPageOrder1] 
go 
------------------------------------ 
--
用途:支持任意排序的分页存储过程  
--
说明: 
--
---------------------------------- 

create PROCEDURE pro_GetRecordByPageOrder1 

    
@tblName varchar(255),   -- 表名 
    @fldName varchar(255)='*',   -- 显示字段名 
    @OrderfldName varchar(255),  -- 排序字段名 
    @PageSize int = 10,   -- 页尺寸 
    @PageIndex int = 1,   -- 页码 
    @IsReCount bit = 0,   -- 返回记录总数, 非 0 值则返回 
    @OrderType bit = 0,   -- 设置排序类型, 非 0 值则降序 
    @strWhere varchar(1000= ''  -- 查询条件 (注意: 不要加 where) 

--with encryption 
AS 
begin 
declare @strSQL varchar(6000)  -- 主语句 
declare @strSQL1 varchar(2000)  -- 主语句 
declare @strTmp varchar(100)   -- 临时变量 
declare @strOrder varchar(400)  -- 排序类型 
set @strTmp = ' where  rownum >'+str((@PageIndex-1)*@PageSize
if @OrderType != 0 
begin 
  
set @strOrder = ' order by [' + @OrderfldName +'] desc' 
end 
else 
begin 
  
set @strOrder = ' order by [' + @OrderfldName +'] asc' 
end 

set @strSQL =' select top ' + str(@PageIndex*@PageSize
+ '  *, ROW_NUMBER() OVER('+@strOrder+') AS rownum from [' + @tblName + '' ; 
if @strWhere != '' 
    
set @strSQL = @strSQL+ ' where '+ @strWhere ; 
if @PageIndex = 1 
begin   
  
set @strSQL ='  select top ' + str(@PageSize+ ' ' + @fldName 
+ ' from  '+@tblName  +' ' 
    
if @strWhere != '' 
        
set @strSQL = @strSQL + ' where '+@strWhere +' '+@strOrder 
    
else 
        
set @strSQL = @strSQL +' '+@strOrder 
end 
else 
    
begin 
        
set @strSQL =' select '  + @fldName + ' from ( '+@strSQL+' ) as tmp1 '+@strTmp
    
end 
if @IsReCount != 0 
begin 
    
set @strSQL = @strSQL+' select count(1) as Total from  ['+@tblName  +'' 
    
if @strWhere != '' 
        
set @strSQL = @strSQL+' where '+@strWhere 
end 
print @strsql 
exec@strSQL
end 
go 
--endregion 

 

关于存储过程的性能(这个主要看你对查询的索引建立是否合理):

支持任意排序的分页存储过程

支持任意排序的分页存储过程

 

有回复说在字段值完全相同的情况下,要出错的问题,我已经作了测试,是完全能正常执行的(2008-12-09)

支持任意排序的分页存储过程

转载于:https://www.cnblogs.com/LifelongLearning/archive/2008/10/23/1317840.html