SQL server动态拼接存储过程分页

create proc StuPage (@name varchar(50), @pageSize int, @currentPage int, @totalCount int out)
as
begin
declare @sql1 nvarchar(max), @sql2 nvarchar(max), @sqlCondition nvarchar(max), @sqlCount nvarchar(max) --定义变量
set @sql1 = 'select * from (select *, ROW_NUMBER() over (order by Sname desc) xuhao from Student where 1 = 1 ' --定义头部
set @sql2 = ' ) t1 where xuhao between (@currentPage - 1) * @pageSize +1 and @currentPage * @pageSize' --定义尾部
set @sqlCount = 'select @totalCount = count(1) from Student where 1 = 1 ' --定义总条数查询语句

set @sqlCondition = '' --置空条件
if @name <> '' --判断姓名是否传入
begin
set @sqlCondition = @sqlCondition + ' and Sname = @name '
end

set @sql1 = @sql1 + @sqlCondition + @sql2 --把前、条件、后段语句合成
exec sp_executesql @sql1, N'@name varchar(50), @pageSize int, @currentPage int', @name, @pageSize, @currentPage --执行查询
set @sqlCount = @sqlCount + @sqlCondition --把总条数查询和条件拼接在一起
exec sp_executesql @sqlCount, N'@name varchar(50), @totalCount int output', @name, @totalCount output --执行总条数查询
end
go

declare @totalCount int
exec StuPage '张三', 5, 2, @totalCount out
select @totalCount

原文地址:https://www.cnblogs.com/zhang2000/p/13230443.html