我想编写一个分页存储过程,根据传入的参数(页码,页容量,总行数,总页数,查询条件,排序类型)获取数据,可由于对sql语句语法了解并不是很全面,老是出现语法错误,请大家帮个忙?
--出现语法问题的Sql语句问题如下
create proc [dbo].[GetPagedData]
@pageNum int, --页码
@pageSize int, --页容量
@rowCount int output, --总行数(避免整除截尾)
@pageCount int output, --总页数
@condition nvarchar(50), --查询条件
@sortField varchar(50), --排序字段
@orderType bit = 1 --排序类型,1升序0降序
as
declare @strSql varchar(1000)
declare @strTemp varchar(110)
begin
if @orderType = 0
set @strTemp = 'NickName like %'+@condition+'% order by '+str(@sortField)+' desc'
else
set @strTemp = 'NickName like %'+@condition+'% order by '+str(@sortField)
set @strSql+='select '+STR(@rowCount)+'=COUNT(*) from Users'
set @strSql+='select '+STR(@pageCount)+'=case when '+STR(@rowCount%@pageSize)+'!=0 then '+STR(@rowCount/@pageSize+1)+' else '+STR(@rowCount/@pageSize)+' end'
set @strSql+='select * from (
select *,ROW_NUMBER() over(order by userId) as rownum from Users
) as t
where t.rownum>='+STR((@pageNum-1)*@pageSize+1)+' and t.rownum<='+STR(@pageNum*@pageSize)+' and '+@strTemp
end
exec(@strsql)
--调用方式
declare @rowCount float, @pageCount int
exec GetPagedData 1, 5,@rowCount output, @pageCount output,'','NickName',1
select @rowCount ,@pageCount
由于 like '%str%' ,所以
set @strTemp = 'NickName like %'+@condition+'% order by '+str(@sortField)+' desc'
需要修改为
set @strTemp = 'NickName like ''%'+@condition+'%'' order by '+str(@sortField)+' desc'
另外,楼主请在
exec(@strsql)前一行增加
Print @strSql
Print @strTemp
然后执行你的调用,即便出错了,也会在SQL的消息里面写出实际组装后执行的SQL语句,
然后分析组装后的语句错误,调整代码
感谢
感谢,如果用exec执行存储过程需要传入带like '%%'格式的参数,sql语句如何写?
if @orderType = 0
set @strTemp = 'name like %'+@condition+'% order by '+@sortField+' desc'
else
set @strTemp = 'name like %'+@condition+'% order by '+@sortField
去掉了你的那个str就行了