ROWNUMBER/Max/top的方式封装到存储过程

1、ROWNUMBER(存储过程)
1 ALTER PROCEDURE [dbo].[Proc_SqlPageByRownumber]
2 (
3 @tbName VARCHAR(255), --表名
4 @tbGetFields VARCHAR(1000)= '*',--返回字段
5 @OrderfldName VARCHAR(255), --排序的字段名
6 @PageSize INT=20, --页尺寸
7 @PageIndex INT=1, --页码
8 @OrderType bit = 0, --0升序,非0降序
9 @strWhere VARCHAR(1000)='', --查询条件
10 --@TotalCount INT OUTPUT --返回总记录数
11 )
12 AS
13 -- =============================================
14 -- Author: allen (liyuxin)
15 -- Create date: 2012-03-30
16 -- Description: 分页存储过程(支持多表连接查询)
17 -- Modify [1]: 2012-03-30
18 -- =============================================
19 BEGIN
20 DECLARE @strSql VARCHAR(5000) --主语句
21 DECLARE @strSqlCount NVARCHAR(500)--查询记录总数主语句
22 DECLARE @strOrder VARCHAR(300) -- 排序类型
23
24 --------------总记录数---------------
25 IF ISNULL(@strWhere,'') <>''
26 SET @strSqlCount='Select @TotalCout=count(*) from ' + @tbName + ' where 1=1 '+ @strWhere
27 ELSE SET @strSqlCount='Select @TotalCout=count(*) from ' + @tbName
28
29 --exec sp_executesql @strSqlCount,N'@TotalCout int output',@TotalCount output
30 --------------分页------------
31 IF @PageIndex <= 0 SET @PageIndex = 1
32
33 IF(@OrderType<>0) SET @strOrder=' ORDER BY '+@OrderfldName+' DESC '
34 ELSE SET @strOrder=' ORDER BY '+@OrderfldName+' ASC '
35
36 SET @strSql='SELECT * FROM
37 (SELECT ROW_NUMBER() OVER('+@strOrder+') RowNo,'+ @tbGetFields+' FROM ' + @tbName + ' WHERE 1=1 ' + @strWhere+' ) tb
38 WHERE tb.RowNo BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND ' +str(@PageIndex*@PageSize)
39
40 exec(@strSql)
41 SELECT @TotalCount
42 END




2、Max/top存储过程
create proc [dbo].[spSqlPageByMaxTop]
@tbName varchar(255), --表名
@tbFields varchar(1000), --返回字段
@PageSize int, --页尺寸
@PageIndex int, --页码
@strWhere varchar(1000), --查询条件
@StrOrder varchar(255), --排序条件
@Total int output --返回总记录数
as
declare @strSql varchar(5000) --主语句
declare @strSqlCount nvarchar(500)--查询记录总数主语句

--------------总记录数---------------
if @strWhere !=''
begin
set @strSqlCount='Select @TotalCout=count(*) from ' + @tbName + ' where '+ @strWhere
end
else
begin
set @strSqlCount='Select @TotalCout=count(*) from ' + @tbName
end
--------------分页------------
if @PageIndex <= 0
begin
set @PageIndex = 1
end

set @strSql='select top '+str(@PageSize)+' * from ' + @tbName + '
where id>(select max(id) from (select top '+str((@PageIndex-1)*@PageSize)+' id from ' + @tbName + ''+@strOrder+')a)
'+@strOrder+''

exec sp_executesql @strSqlCount,N'@TotalCout int output',@Total output
exec(@strSql)
原文地址:https://www.cnblogs.com/starts/p/5127032.html