改进并测试的存储过程CREATE PROCEDURE sp_GetPageData
改进并测试的存储过程
@TableName sysname,    --表名
改进并测试的存储过程
         @SQL varchar(500),--约束条件
改进并测试的存储过程
@PageIndex int,--页所引,从0开始
改进并测试的存储过程
@PageSize int,--分页大小
改进并测试的存储过程
@orderDESC varchar(100),--倒排序字段,支持多个字段
改进并测试的存储过程
@orderASC varchar(100),--顺排序字段,支持多个,字段先后顺序与倒排序一致
改进并测试的存储过程
@RecordCount int out,--返回记录数
改进并测试的存储过程
@PageCount int out--返回页数
改进并测试的存储过程
AS
改进并测试的存储过程
declare @num int-- 2005-12-21更改,直接用SQL返回记录数 by wjh
改进并测试的存储过程
declare @vSQL nvarchar(2000)
改进并测试的存储过程
set @vSQL = N'select @count=Count(*) from ' + @TableName + N' where ' + @SQL
改进并测试的存储过程
exec sp_ExecuteSQL @vSQL, N'@count int output'@num output
改进并测试的存储过程
select @RecordCount=@num
改进并测试的存储过程
改进并测试的存储过程
SET @PageCount = CEILING(@RecordCount * 1.0)/@PageSize
改进并测试的存储过程
DECLARE @sqlStr varchar(1000)
改进并测试的存储过程
IF @PageIndex = 0 OR @PageIndex < 1
改进并测试的存储过程
SET @sqlStr = 'SELECT TOP ' + STR(@PageSize+ ' *  FROM '+@TableName+' WHERE '+@SQL+' ORDER BY  '+@orderDESC
改进并测试的存储过程
ELSE IF @PageIndex = @PageCount -1
改进并测试的存储过程
SET @sqlStr = 'SELECT *  FROM (SELECT TOP ' +STR(@PageSize
改进并测试的存储过程     
+'  *  FROM '+@TableName+' WHERE '+@SQL+' ORDER BY  '+@orderASC+') TempTable  ORDER BY '+@orderDESC
改进并测试的存储过程
ELSE -- 此处可以加优化,从中间页往两边
改进并测试的存储过程
SET @sqlStr = 'SELECT TOP ' + STR(@PageSize+ ' * FROM (SELECT TOP ' 
改进并测试的存储过程     
+ STR(@RecordCount - @PageSize * @PageIndex ) + '  *  FROM '+@TableName
改进并测试的存储过程     
+' WHERE '+@SQL+'  ORDER BY '+@orderASC+') TempTable  ORDER BY  '+@orderDESC
改进并测试的存储过程
EXEC(@sqlStr)
改进并测试的存储过程
GO

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-07
  • 2022-12-23
  • 2021-04-28
  • 2022-12-23
猜你喜欢
  • 2022-02-07
  • 2021-06-12
  • 2021-09-20
  • 2022-03-10
  • 2021-09-01
  • 2022-12-23
  • 2021-10-03
相关资源
相似解决方案