急。。存储过程找不到参数的问题。。。

aier3333 2016-06-01 08:22:05
ALTER PROCEDURE  [dbo].[Paging] 
@sql nvarchar(4000),--要执行的sql语句
@page int=1, --要显示的页码
@pageSize int,--每页的大小
@pageCount int=0 out,--总页数
@recordCount int=0 out,--总记录数
@SearchTime int=0 out
as
declare @usetime datetime
set @usetime=getdate()
set nocount on
begin
declare @p1 int
exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output
set @recordCount = @pageCount
select @pagecount=ceiling(1.0*@pagecount/@pagesize)
,@page=(@page-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@page,@pagesize
exec sp_cursorclose @p1
set @SearchTime=datediff(ms,@usetime,getdate())
print @SearchTime
end



求各位大神帮我看看上面的储存过程,为什么在我自己的笔记本上和另外一台台式机上正常,单一放到server2003的服务器上,就是报错,报找不到@pageSize、@pageCount的标量声明。这是为什么呢,该怎么解决啊

分不多了 ,请各位拔刀相助!!!
...全文
235 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
aier3333 2016-06-21
  • 打赏
  • 举报
回复
引用 11 楼 roy_88 的回复:
测试了一下就没问题,你调用方法不对,看看是不是少定义了@pageSize赋值 EXEC [dbo].[Paging] @sql='SELECT OBJECT_ID AS ID,Name from sys.tables',@pageSize=10
我在我的笔记本上,试你的存储过程又没问题。。一放服务器就报错,最后我也没找到为什么,刚好要换台服务器部署,又是正常的。暂时放上去了先用吧。
中国风 2016-06-01
  • 打赏
  • 举报
回复
用out这没问题,这是output的缩写
aier3333 2016-06-01
  • 打赏
  • 举报
回复
额外问一下大神们哦,这out是不是数据库中没有这个用法,还是是旧版本的用法啊。。我到网上找相关资料,都是output.
aier3333 2016-06-01
  • 打赏
  • 举报
回复
引用 6 楼 roy_88 的回复:
用以下方法调试一下
ALTER PROCEDURE  [dbo].[Paging] 
@sql nvarchar(4000),--要执行的sql语句
@page int=1, --要显示的页码
@pageSize int,--每页的大小
@pageCount int=0 out,--总页数
@recordCount int=0 out,--总记录数
@SearchTime int=0 out
as
declare @usetime datetime
set @usetime=getdate()
set nocount on
begin
declare @p1 int
--初始化游标
EXEC sp_cursoropen 
	@cursor=@p1 OUTPUT,
	@stmt=@sql,
	@scrollopt=1,
	@ccopt=1,
	@rowcount=@recordCount OUTPUT


SELECT @pageCount=ceiling(1.0*@recordCount/@pageSize)
,@page=(@page-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@page,@pagesize 
exec sp_cursorclose @p1
set  @SearchTime=datediff(ms,@usetime,getdate())
print @SearchTime
end
我一会儿在服务器上试试。。。,真实奇怪,我看了我的数据库版本是一模一样的。
中国风 2016-06-01
  • 打赏
  • 举报
回复
用以下方法调试一下
ALTER PROCEDURE  [dbo].[Paging] 
@sql nvarchar(4000),--要执行的sql语句
@page int=1, --要显示的页码
@pageSize int,--每页的大小
@pageCount int=0 out,--总页数
@recordCount int=0 out,--总记录数
@SearchTime int=0 out
as
declare @usetime datetime
set @usetime=getdate()
set nocount on
begin
declare @p1 int
--初始化游标
EXEC sp_cursoropen 
	@cursor=@p1 OUTPUT,
	@stmt=@sql,
	@scrollopt=1,
	@ccopt=1,
	@rowcount=@recordCount OUTPUT


SELECT @pageCount=ceiling(1.0*@recordCount/@pageSize)
,@page=(@page-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@page,@pagesize 
exec sp_cursorclose @p1
set  @SearchTime=datediff(ms,@usetime,getdate())
print @SearchTime
end
中国风 2016-06-01
  • 打赏
  • 举报
回复
你的SQL版本是否不一致,这系统分页就好别用,这是SQL2000时会用到,新版用Row_Number/或offset ..rows fetch next ..rows 分页
卖水果的net 2016-06-01
  • 打赏
  • 举报
回复
你是调用时出错,还是创建是出错误“? 最好截个图上来;
kingtiy 2016-06-01
  • 打赏
  • 举报
回复
呵,楼主厉害. 对于out参数,传值的时候确实需要指定方向的.
aier3333 2016-06-01
  • 打赏
  • 举报
回复
我大概晓得了,好像是out的原因,没有out这个鬼,好像是output
aier3333 2016-06-01
  • 打赏
  • 举报
回复
不要沉啦啦啦
中国风 2016-06-01
  • 打赏
  • 举报
回复
测试了一下就没问题,你调用方法不对,看看是不是少定义了@pageSize赋值 EXEC [dbo].[Paging] @sql='SELECT OBJECT_ID AS ID,Name from sys.tables',@pageSize=10
aier3333 2016-06-01
  • 打赏
  • 举报
回复
引用 6 楼 roy_88 的回复:
用以下方法调试一下
ALTER PROCEDURE  [dbo].[Paging] 
@sql nvarchar(4000),--要执行的sql语句
@page int=1, --要显示的页码
@pageSize int,--每页的大小
@pageCount int=0 out,--总页数
@recordCount int=0 out,--总记录数
@SearchTime int=0 out
as
declare @usetime datetime
set @usetime=getdate()
set nocount on
begin
declare @p1 int
--初始化游标
EXEC sp_cursoropen 
	@cursor=@p1 OUTPUT,
	@stmt=@sql,
	@scrollopt=1,
	@ccopt=1,
	@rowcount=@recordCount OUTPUT


SELECT @pageCount=ceiling(1.0*@recordCount/@pageSize)
,@page=(@page-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@page,@pagesize 
exec sp_cursorclose @p1
set  @SearchTime=datediff(ms,@usetime,getdate())
print @SearchTime
end
还是报必须声明标量变量@pagesize

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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