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 + '