请问存储过程为何这样使用参数会错,该怎么写?

waterass 2003-08-22 10:48:47
打算用存储过程实现分页,
有参数@Page,是要显示的页数
@TypeID 是类别ID,是查询的限制条件
如下存储过程:

CREATE Procedure selectCurrentPage @Page int,@TypeID int AS
SELECT top 10 * FROM FileDetail
where FileID not in (select top (@Page-1)*10 FileID from FileDetail) and TypeID=@TypeID
return

总是说@Page附近有语法错误。
还有就是这样分页在数据大约是1000条左右,每页显示10条是否合适?
是否有更好的办法?

请大家帮帮忙吧。
...全文
32 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterass 2003-08-22
  • 打赏
  • 举报
回复
To txlicenhe(不做技术高手)
终于搞定了,太感谢了。
To CrazyFor(太阳下山明朝依旧爬上来)
你的还是说cast附近有语法错误,不过还是十分感谢你的大力相助
CrazyFor 2003-08-22
  • 打赏
  • 举报
回复
CREATE Procedure selectCurrentPage @Page int,@TypeID int AS
exec(' SELECT top 10 * FROM FileDetail
where FileID not in (select top '+cast((@Page-1)*10 as varchar) +' FileID from FileDetail) and TypeID='+cast(@TypeID as varchar) )

return
txlicenhe 2003-08-22
  • 打赏
  • 举报
回复
CREATE Procedure selectCurrentPage @Page int,@TypeID int
AS
declare @sql varchar(200)
set @sql = '
SELECT top 10 * FROM FileDetail
where FileID not in (select top ' + cast((@Page-1)*10 as char) + ' FileID from FileDetail) and TypeID= ' + cast(@TypeID as char)

exec(@sql)
return
waterass 2003-08-22
  • 打赏
  • 举报
回复
还是有错啊。
westbulls 2003-08-22
  • 打赏
  • 举报
回复
to waterass:
cast((@Page-1)*10 as varchar)这句有误,应改为 
cast((@Page-1)*10 as varchar(6))

waterass 2003-08-22
  • 打赏
  • 举报
回复
To CrazyFor(太阳下山明朝依旧爬上来)
分析器报告说cast附近有语法错误。
该怎么办?
CrazyFor 2003-08-22
  • 打赏
  • 举报
回复
CREATE Procedure selectCurrentPage @Page int,@TypeID int AS
exec(' SELECT top 10 * FROM FileDetail
where FileID not in (select top '+cast((@Page-1)*10 as varchar) +' FileID from FileDetail) and TypeID=@TypeID')

return

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧