SqlServer 分页查询语句存储过程

CREATE PROCEDURE  [dbo].[Proc_SqlPageByRownumber]
(
    @tbName VARCHAR(2000),            --表名
    @tbGetFields VARCHAR(1000)= '*',--返回字段
    @OrderfldName VARCHAR(255),        --排序的字段名
    @PageSize INT=20,               --页尺寸
    @PageIndex INT=1,               --页码
    @OrderType bit = 0,                --0升序,非0降序
    @strWhere VARCHAR(1000)='',     --查询条件
    @TotalCount INT OUTPUT            --返回总记录数
)
AS
BEGIN
    DECLARE @strSql VARCHAR(5000)    --主语句
    DECLARE @strSqlCount NVARCHAR(4000)--查询记录总数主语句
    DECLARE @strOrder VARCHAR(300) -- 排序类型

    --------------总记录数---------------
    IF ISNULL(@strWhere,'') <>'' 
         SET @strSqlCount='Select @TotalCout=count(*) from  ' + @tbName + ' where 1=1 '+ @strWhere
    ELSE SET @strSqlCount='Select @TotalCout=count(*) from  ' + @tbName
    print 1
    exec sp_executesql @strSqlCount,N'@TotalCout int output',@TotalCount output
    --------------分页------------
    IF @PageIndex <= 0 SET @PageIndex = 1
print 2
    IF(@OrderType<>0) SET @strOrder=' ORDER BY '+@OrderfldName+' DESC '
    ELSE SET @strOrder=' ORDER BY '+@OrderfldName+' ASC '
print 3
    SET @strSql='SELECT *,'+CONVERT(nvarchar(10),@TotalCount)+' as TotalCount '+' FROM 
    (SELECT ROW_NUMBER() OVER('+@strOrder+') RowNo,'+ @tbGetFields+' FROM ' + @tbName + ' WHERE 1=1 ' + @strWhere+' ) tb 
    WHERE tb.RowNo BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND ' +str(@PageIndex*@PageSize)
    print @strSql
    exec(@strSql)
END

GO

猜你喜欢

转载自www.cnblogs.com/zldqpm/p/11911964.html