首页 新闻 会员 周边 捐助

编写分页存储过程出现的语法错误?

0
悬赏园豆:15 [已解决问题] 解决于 2012-09-17 08:36

我想编写一个分页存储过程,根据传入的参数(页码,页容量,总行数,总页数,查询条件,排序类型)获取数据,可由于对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

竹墨轩的主页 竹墨轩 | 初学一级 | 园豆:58
提问于:2012-09-07 22:04
< >
分享
最佳答案
0

由于  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语句,

然后分析组装后的语句错误,调整代码

 

收获园豆:10
acepro | 小虾三级 |园豆:1218 | 2012-09-10 09:52

感谢

竹墨轩 | 园豆:58 (初学一级) | 2012-09-12 23:42

感谢,如果用exec执行存储过程需要传入带like '%%'格式的参数,sql语句如何写?

竹墨轩 | 园豆:58 (初学一级) | 2012-09-12 23:43
其他回答(1)
0

if @orderType = 0
set @strTemp = 'name like %'+@condition+'% order by '+@sortField+' desc'
else
set @strTemp = 'name like %'+@condition+'% order by '+@sortField

 

去掉了你的那个str就行了

收获园豆:5
chenping2008 | 园豆:9836 (大侠五级) | 2012-09-09 20:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册