微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

最新SqlServer2005分页存储过程备份

Create PROCEDURE [dbo].[USP_Execute_Page]
(
     @Fields nvarchar(max) = 'T.*'      --字段
   ,@TableName nvarchar(200)           --表名
   ,@Joins nvarchar(max) = ''          --连接表及规则
   ,@Wheres nvarchar(max) = ''         --不用 Where 关键字
   ,@Orders nvarchar(600) = ''         --不同 Order By 关键字
   ,@PageSize int = 20                 --页宽
   ,@PageIndex int = 0                 --1.表示第一页  |  0.表示不分页 
   ,@RowCount int output               --记录总数,只在当前页小于1时产生
)
AS
SET NOCOUNT ON

-- 设置where的认值
if LTRIM(RTRIM(@Wheres)) = ''
    begin set @Wheres = ''  end
else
    begin set @Wheres = ' Where ' + @Wheres end 

--设置Order By的认值
if LTRIM(RTRIM(@Orders)) = ''
    begin set @Orders = '' end
else
    begin set @Orders = ' Order By ' + @Orders end

----------------- 定义变量 -----------------//
declare @strsql nvarchar(max)
declare @iSum int
declare @defaultsql nvarchar(max)
set @defaultsql = 'With S1 AS (Select '+ @Fields + ' From ' + @TableName + ' AS T ' + @Joins +') ';
                  
-- 计算记录总数 --
IF @PageIndex = 1 BEGIN
    set @strsql = @defaultsql + 'Select @iSum = count(0) From S1 ' + @Wheres;
                  
    exec sp_executesql @strsql
       ,@params = N'@iSum int output'
       ,@iSum = @iSum OUTPUT ;
    set @RowCount = @iSum;
END


--------------- 不执行分页查询 ---------------//
IF @pageIndex < 1
BEGIN
    SET @strsql = @defaultsql + 'Select Top ' + Convert(varchar(10),@PageSize) + ' * From S1 ' + @Wheres + ' ' + @Orders;
    EXEC(@strsql) ;
END

--------------- 执行分页查询 -----------------//ELSE  BEGIN      DECLARE @min int,@max int;     SET @min = (@pageIndex-1) * @pageSize;     SET @max = (@pageIndex) * @PageSize;               SET @strsql = @defaultsql + ',                  S2 AS(                     Select Row_Number() Over(' +@Orders+ ') AS RowId,*  From S1 ' +@Wheres+ '                    )                  Select * From S2 Where RowId > ' + CONVERT(varchar(10),@min) + '                    AND RowId <= ' + CONVERT(varchar(10),@max)        EXEC (@strsql) END

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐