一个简单的存储过程返回记录集的问题--只返回一条记录

萤火架构 2007-03-30 01:00:08
存储过程
@newsclid 新闻id
@newstopnum 返回记录数
---------------------------------------
CREATE proc wu_news_top
@newsclid int,
@newstopnum int
as
begin
exec('select top '+@newstopnum+' news_id,news_title,news_content from wu_news where ncl_id='+@newsclid+' order by news_id desc')
end
GO

asp调用
____________________________________________________________
set rs=server.createobject("adodb.recordset")
strsql="wu_news_top 18,3"
rs.open strsql,conn,1,1
if not rs.eof then
dim ni
ni=0
do while not rs.eof
%>
..............................
<%
rs.movenext
ni=ni+1
if ni>=rs.recordcount then exit do
loop
end if
rs.close
set rs=nothing
%>

问题:
1、为什么只返回一条记录?
2、修改
exec('select top '+@newstopnum+' news_id,news_title,news_content from wu_news where ncl_id='+@newsclid+' order by news_id desc')

set @strs='select top '+@newstopnum+' news_id,news_title,news_content from wu_news where ncl_id='+@newsclid+' order by news_id desc'
exec(@strs)
asp程序报错,为什么?

请给出正确的使用方法,谢谢!
...全文
241 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsl5305256 2007-03-30
  • 打赏
  • 举报
回复
那是刚开始的时候 rs.recordcount=-1造成的;
加上
rs.CursorLocation = 3
rs.open strsql,conn,1,1
rs.recordcount就不会有问题了,就是等于记录总数!
萤火架构 2007-03-30
  • 打赏
  • 举报
回复
Declare @strs varchar(1000)
set @strs='select top '+Cast(@newstopnum As Varchar)+' news_id,news_title,news_content from wu_news where ncl_id='+Cast(@newsclid As Varchar)+' order by news_id desc'
exec(@strs)

这样写也不可以
但是问题似乎解决了,我加了这么一句,rs.CursorLocation = 3

set rs=server.createobject("adodb.recordset")
strsql="wu_news_top 18,3"
rs.CursorLocation = 3
rs.open strsql,conn,1,1

可我还是不明白,谁能说明一下
paoluo 2007-03-30
  • 打赏
  • 举报
回复
1、为什么只返回一条记录?
------
你測試一下別的情況,是不是也只返回一條紀錄。
Zack999 2007-03-30
  • 打赏
  • 举报
回复
CREATE proc wu_news_top
@newsclid int,
@newstopnum int
as
begin
declare @sql varchar(1000)
set @sql='select top '+cast(@newstopnum as varchar)+' news_id,news_title,news_content from wu_news where ncl_id='+cast(@newsclid as varchar)+' order by news_id desc'
exec(@sql)
end
GO
paoluo 2007-03-30
  • 打赏
  • 举报
回复
2、修改
exec('select top '+@newstopnum+' news_id,news_title,news_content from wu_news where ncl_id='+@newsclid+' order by news_id desc')

set @strs='select top '+@newstopnum+' news_id,news_title,news_content from wu_news where ncl_id='+@newsclid+' order by news_id desc'
exec(@strs)

----------
這一步要這麼修改


Declare @strs varchar(1000)
set @strs='select top '+Cast(@newstopnum As Varchar)+' news_id,news_title,news_content from wu_news where ncl_id='+Cast(@newsclid As Varchar)+' order by news_id desc'
exec(@strs)
CathySun118 2007-03-30
  • 打赏
  • 举报
回复
估计是你的rs.recordcount 有问题,可能是-1吧,修改rs.open的参数吧

22,207

社区成员

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

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