700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > MS SQL SERVER 分页存储过程

MS SQL SERVER 分页存储过程

时间:2022-06-24 14:24:33

相关推荐

MS SQL SERVER 分页存储过程

alter PROCEDURE [dbo].[PR_PageDivide]

(

@TableName varchar(50), --表名

@SelectField varchar(200) = '*', --字段名(全部字段为*)

@OrderString varchar(200), --排序字段(必须!支持多字段不用加order by)

@WhereString varchar(500) =N'', --条件语句(不用加where)

@PageSize int = 15, --每页多少条记录

@PageIndex int = 1 , --指定当前为第几页

@TotalPages int output --返回总页数

)

AS

BEGIN

if @PageIndex<=0

set @PageIndex=1

if @PageSize<0

set @PageSize=15

--处理开始点和结束点

Declare @TotalRecord int

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,'+@SelectField+' from '+ @TableName;--查询语句

--

IF (@WhereString! = '' or @WhereString!=null)

BEGIN

SET @TotalCountSql=@TotalCountSql + ' where '+ @WhereString;

SET @SqlString =@SqlString+ ' where '+ @WhereString;

END

EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回总记录数

select @TotalPages=CEILING((@TotalRecord+0.0)/@PageSize)

set @SqlString ='select * from ' + @SqlString + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' + ltrim(str(@EndRecord));

Exec(@SqlString)

END

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。