SQL Server 存储过程 分页、条件查询

SQL Server 存储过程 分页、条件查询

2019/08/01 18:17


--切换到db_StuManagement数据库
use db_StuManagement
go


--分页查询

--判断存储过程是否存在
if exists(SELECT * FROM sys.objects where name='proc_PagePaging')
drop proc proc_PagePaging
go
--创建存储过程
create proc proc_PagePaging
--声明参数
@stuNumber varchar(16),
@stuSex int,
@pageIndex int,
@pageSize int,
@tbName varchar(18),
@rowCount int output 
as
BEGIN
--声明变量
DECLARE  @sqlStr nVARCHAR(500)
SET @sqlStr='select * from '+@tbName+' where 1=1 '
DECLARE  @whereStr nVARCHAR(500)
SET @whereStr=''


print @sqlStr


--添加学生学号查询条件
IF(@stuNumber!='' AND @stuNumber IS NOT NULL)
BEGIN
SET @whereStr=' and stuNumber LIKE ''%'+@stuNumber+'%'''
END
--添加学生性别查询条件
IF(@stuSex IS NOT NULL)
BEGIN
SET @whereStr+=' and stuSex='+cast(@stuSex as varchar)
END
--条件拼接完成
SET @sqlStr+=@whereStr
print @sqlStr


 select @rowCount=count(0) from stuMessage
 declare @sumIndex int
 set @sumIndex=CEILING(CAST(@rowCount as float)/cast(@pageSize as float))


 print @sumIndex
 print @pageIndex
  print @sumIndex
if(@pageIndex<1)
begin
set @pageIndex=1
end
if(@pageIndex>@sumIndex)
begin
set @pageIndex=@sumIndex
end
print @pageIndex
--这种语法2012年出的,在数据库版本2008及之前的数据库无法使用
--另一种写法使用ROW_NUMBER() over()
set @sqlStr='SELECT * FROM ('+@sqlStr+') as tb ORDER BY tb.stuID OFFSET ('+convert(varchar,@pageIndex)+'-1)*'+convert(varchar,@pageSize)+' ROWS FETCH NEXT '+cast(@pageSize as varchar)+' ROWS ONLY'
print @sqlStr
exec sp_executesql @sqlStr;
//注意sp_executesql执行动态sql,只能是Nvarchar 就连varchar都不行,上面定义时候注意一下。因为是执行动态sql语句,所以拼接的字符串中int类型要强转一下
END



版权声明:本文为qq_45082130原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。