日期:2014-05-17  浏览次数:20465 次

sql存储过程分页排序问题
本帖最后由 wms102 于 2013-07-09 17:10:04 编辑
USE [database]
GO
/****** Object:  StoredProcedure [dbo].[UpPagerSingle]    Script Date: 07/09/2013 14:14:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[UpPagerSingle]
(
@TableName nvarchar(50), -- 表名
@ReturnFields nvarchar(2000) = '*', -- 需要返回的列 
@PageSize int = 10, -- 每页记录数
@PageIndex int = 1, -- 当前页码
@Where nvarchar(2000) = '', -- 查询条件
@Orderfld nvarchar(2000), -- 排序字段名 最好为唯一主键
@OrderType int = 1 -- 排序类型 1:降序 其它为升序
)
As

Declare @TotalRecord int
Declare @TotalPage int
Declare @CurrentPageSize int
Declare @TotalRecordForPageIndex int
Declare @OrderBy nvarchar(255)
Declare @CutOrderBy nvarchar(255)

If(@PageIndex = 0)
SET @PageIndex = 1

If @OrderType = 1
Begin
Set @OrderBy = ' Order By ' + REPLACE(@Orderfld, ',', ' Desc,') + ' Desc '
Set @CutOrderBy = ' Order By '+ REPLACE(@Orderfld, ',', ' Asc,') + ' Asc '
End
Else
Begin
Set @OrderBy = ' Order By ' + REPLACE(@Orderfld, ',', ' Asc,') + ' Asc '
Set @CutOrderBy = ' Order By '+ REPLACE(@Orderfld, ',', ' Desc,') + ' Desc ' 
End

-- 记录总数
Declare @countSql nvarchar(4000) 
Set @countSql = 'Select @TotalRecord = Count(*) From ' + @TableName + ' ' + @Where
Exec sp_executesql @countSql, N'@TotalRecord int out', @TotalRecord out

Set @TotalPage = (@TotalRecord - 1) / @PageSize + 1
Set @CurrentPageSize = @PageSize

If(@TotalPage = @PageIndex)
Begin
SET @CurrentPageSize = @TotalRecord % @PageSize
IF(@CurrentPageSize = 0)
SET @CurrentPageSize = @PageSize
End

-- 返回记录
Set @TotalRecordForPageIndex = @PageIndex * @PageSize
Exec('Select * From
(Select Top ' + @CurrentPageSize + ' * From
(Select Top ' + @TotalRecordForPageIndex + ' ' + @ReturnFields + '