之前用过的一些存储过程分页
大多数都只能根据主键排序,可是实际上,我们经常需要依据非主键排序并分页,比如,按工资大小
下面的代码能完成工作
可以依据任何字段进行排序并分页的存储过程ALTER PROCEDURE dbo.GetPageRecord
可以依据任何字段进行排序并分页的存储过程    (
可以依据任何字段进行排序并分页的存储过程    @tblName      
varchar(255),       -- 表名
可以依据任何字段进行排序并分页的存储过程
    @fldName      varchar(255),       --排序字段
可以依据任何字段进行排序并分页的存储过程
    @KeyField     varchar(255),        --主键
可以依据任何字段进行排序并分页的存储过程
    @PageSize     int = 10,           -- 页尺寸
可以依据任何字段进行排序并分页的存储过程
    @PageIndex    int = 1,            -- 页码
可以依据任何字段进行排序并分页的存储过程
    @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
可以依据任何字段进行排序并分页的存储过程
    @OrderType    bit = 1,            -- 设置排序类型, 非 0 值则降序
可以依据任何字段进行排序并分页的存储过程
    @strWhere     varchar(4000= ''  -- 查询条件 (注意: 不要加 where)
可以依据任何字段进行排序并分页的存储过程
    )
可以依据任何字段进行排序并分页的存储过程
AS
可以依据任何字段进行排序并分页的存储过程
SET NOCOUNT ON
可以依据任何字段进行排序并分页的存储过程
DECLARE @PageLowerBound int
可以依据任何字段进行排序并分页的存储过程
DECLARE @PageUpperBound int
可以依据任何字段进行排序并分页的存储过程
可以依据任何字段进行排序并分页的存储过程
-- Set the page bounds
可以依据任何字段进行排序并分页的存储过程
SET @PageLowerBound = @PageSize * @PageIndex
可以依据任何字段进行排序并分页的存储过程
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
可以依据任何字段进行排序并分页的存储过程
可以依据任何字段进行排序并分页的存储过程
-- Create a temp table to store the select results
可以依据任何字段进行排序并分页的存储过程
CREATE TABLE #tmp
可以依据任何字段进行排序并分页的存储过程(
可以依据任何字段进行排序并分页的存储过程     RecNo 
int IDENTITY (11NOT NULL,
可以依据任何字段进行排序并分页的存储过程     oldid 
int
可以依据任何字段进行排序并分页的存储过程)
可以依据任何字段进行排序并分页的存储过程
--generate record
可以依据任何字段进行排序并分页的存储过程
Declare @Sqlstr varchar(6000)
可以依据任何字段进行排序并分页的存储过程
set @sqlstr='select '+@Keyfield+' from '+@tblname
可以依据任何字段进行排序并分页的存储过程
if(@strWhere<>'')
可以依据任何字段进行排序并分页的存储过程
begin
可以依据任何字段进行排序并分页的存储过程    
set @Sqlstr=@sqlstr+' where ('+@strWhere+')'
可以依据任何字段进行排序并分页的存储过程
end
可以依据任何字段进行排序并分页的存储过程
set @sqlstr=@sqlstr+' order by '+@fldName
可以依据任何字段进行排序并分页的存储过程
if(@ordertype=0)
可以依据任何字段进行排序并分页的存储过程
begin
可以依据任何字段进行排序并分页的存储过程    
set @sqlstr=@sqlstr+' asc'
可以依据任何字段进行排序并分页的存储过程
end
可以依据任何字段进行排序并分页的存储过程
else
可以依据任何字段进行排序并分页的存储过程
begin
可以依据任何字段进行排序并分页的存储过程    
set @sqlstr=@sqlstr+' desc'
可以依据任何字段进行排序并分页的存储过程
end
可以依据任何字段进行排序并分页的存储过程
set @sqlstr='insert into #tmp (oldid) '+@sqlstr
可以依据任何字段进行排序并分页的存储过程
execute(@sqlstr)
可以依据任何字段进行排序并分页的存储过程
set @sqlstr='SELECT TableA.* FROM '+@tblname+' TableA (nolock), #tmp T WHERE T.oldid = TableA.'+@keyfield+' AND T.RecNo > '+ cast(@PageLowerBound as varchar)+' AND  T.RecNo < '+cast(@PageUpperBound as varchar)+' ORDER BY T.RecNo'
可以依据任何字段进行排序并分页的存储过程
execute(@sqlstr)

相关文章: