加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver 存储过程分页

发布时间:2020-12-12 14:18:50 所属栏目:MsSql教程 来源:网络整理
导读:USE [HK_ERP_Report]GO/****** Object: StoredProcedure [dbo].[spPF_AppRpt_Tupu_CommonPage] Script Date: 2019/4/4 12:00:23 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO/*DECLARE@return_value int,@PageCount int,@TotalRecord intEXEC@retu
USE [HK_ERP_Report]
GO
/****** Object:  StoredProcedure [dbo].[spPF_AppRpt_Tupu_CommonPage]    Script Date: 2019/4/4 12:00:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
DECLARE	@return_value int,@PageCount int,@TotalRecord int

EXEC	@return_value = [dbo].[spPF_AppRpt_Tupu_CommonPage]
		@TableName = N‘PF_Shopper‘,@ReFieldsStr = N‘*‘,@OrderString = N‘LastVisitTime asc‘,@PageSize = 10,@PageIndex = 1,@TotalRecord = @TotalRecord OUTPUT,@PageCount = @PageCount OUTPUT

SELECT	@TotalRecord as N‘@TotalRecord‘,@PageCount as N‘@PageCount‘

SELECT	‘Return Value‘ = @return_value

*/
ALTER PROCEDURE [dbo].[spPF_AppRpt_Tupu_CommonPage]
?? ?@TableName VARCHAR(50),? ? ? ? ? ?--表名
? ? @ReFieldsStr VARCHAR(200) = ‘*‘,? --字段名(全部字段为*)
? ? @OrderString VARCHAR(200),? ? ? ? --排序字段(必须!支持多字段不用加order by)
? ? @WhereString VARCHAR(500) =N‘‘,?--条件语句(不用加where)
? ? @PageSize INT = 10,? ? ? ? ? ? ? ? ? ? --每页多少条记录
? ? @PageIndex INT = 1,? ? ? ? ? ? ? --指定当前为第几页
	@PageCount INT = 0 OUTPUT,--总页数? ? 
	@TotalRecord INT OUTPUT ? ? ? ? ? ?--返回总记录数
AS
BEGIN
?? ? --处理开始点和结束点
? ? DECLARE @StartRecord INT;
? ? DECLARE @EndRecord INT;?
? ? DECLARE @TotalCountSql NVARCHAR(500);?
? ? DECLARE @SqlString NVARCHAR(2000); ? ?
? ? SET @StartRecord = (@PageIndex-1)*@PageSize + 1--起始记录
? ? SET @EndRecord = @StartRecord + @PageSize - 1 --结尾记录
? ? SET @TotalCountSql= N‘select @TotalRecord = count(*) from ‘ + @TableName;--总记录数语句
? ? SET @SqlString = N‘(select row_number() over (order by ‘+ @OrderString +‘) as rowId,‘[email?protected]+‘ from ‘+ @TableName;--查询语句
? ? --
? ? IF (@WhereString! = ‘‘ or @WhereString!=null)
? ? ? ? BEGIN
? ? ? ? ? ? SET @[email?protected] + ‘ where ‘+ @WhereString;
? ? ? ? ? ? SET @SqlString [email?protected]+ ‘ where ‘+ @WhereString; ? ? ? ? ? ?
? ? ? ? END
? ? --第一次执行得到
? ? EXEC sp_executesql @totalCountSql,N‘@TotalRecord int out‘,@TotalRecord OUTPUT;--返回总记录数
	SET @[email?protected]/@pageSize+(CASE WHEN @TotalRecord%@pageSize>0 THEN 1 ELSE 0 END)

? ? ----执行主语句
? ? SET @SqlString =‘select * from ‘ + @SqlString + ‘) as t where rowId between ‘ + ltrim(str(@StartRecord)) + ‘ and ‘ + ?ltrim(str(@EndRecord));
? ? Exec(@SqlString) ? ?
END

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读