sql server的分页查询存储过程和调试后的语句记录

一个sql server的存储过程,传参调用,实现分页查询功能。

比如名字就叫QueryListByPage

USE [DevDB]
GO
/****** Object:  StoredProcedure [dbo].[QueryListByPage]    Script Date: 2020/1/9 17:43:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--分页存储过程
ALTER PROCEDURE [dbo].[QueryListByPage]  
@sql varchar(max), --表名、视图名、查询语句
@pageIndex bigint=1,   --要显示的页
@pageSize int=10,   --每页的大小(行数)
@fieldShow VarChar(500), --要显示的字段列表(为空列出所有字段)
@orderBy NVarChar(2000), --排序字段列表
@rows bigint  OUTPUT,      -- 输出记录数, 如果@rows为null, 则输出记录数, 否则不要输出
@param varchar(max) --sql语句中的参数
AS

--declare @strSql varchar(max) -- 主语句
--declare @strTmp varchar(100) -- 临时变量
--declare @strOrder varchar(400) -- 排序类型
--declare @head VarChar(max)

declare @sqlQuery varchar(max)

if (@fieldShow ='' or @fieldShow is null)
set @fieldShow = '*' 

if (@param is null)
set @param = '' 
 
declare @rowsResult nvarchar(max)
declare @sqlCount nvarchar(max)
set @rowsResult = @param + 'select @rows = count(1) from '+ @sql
exec sp_executesql @rowsResult, N'@rows int out', @rows out

declare @startNumber varchar(20)
declare @endNumber varchar(20)
declare @sqlPage nvarchar(max)
set @startNumber = (@pageSize*(@pageIndex-1)) + 1
set @endNumber = (@pageSize*@pageIndex)
set @sqlPage = @sql
set @sqlPage = stuff(@sqlPage,charindex('(SELECT',@sqlPage),7,'(SELECT row_number() over(order by ' + @orderBy + ' ) as row_num,')
set @sqlPage = REPLACE (@sqlPage,')temp' ,')temp where row_num>=' + @startNumber + ' and row_num<=' + @endNumber)
set @sqlQuery = @param + 'with t_rowtable as ( select' + @fieldShow + ' from ' + @sqlPage + ' ) 
select ' + @fieldShow + ' from t_rowtable'
print @sqlQuery

exec (@sqlQuery)

最终执行的语句:
形如:


with t_rowtable as ( select* from (SELECT row_number() over(order by TableId ) as row_num, * FROM Table1)temp where row_num>=1 and row_num<=10 ) 
select * from t_rowtable

sql server 调试方法:
亲测有效@2020年1月9日

sqlserver2008 调试存储过程

自己随便搞一个表查一下就知道了。

发布了177 篇原创文章 · 获赞 47 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/festone000/article/details/103913102
今日推荐