读取从第n条记录到m条记录的SQL语句??????

zytp 2003-10-27 11:20:57
在网上找到的但我用不好使!
Microsoft JET Database Engine 错误 '80040e14'

SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确。

/news/test1.asp,行8
数据库中有20条记录!
帮我看看或者,你有别的方法能读出从第n条记录到m条记录的方法
请赐教 !
<!--#include file="conn.asp"-->
<%
dim m,n
n=1
m=10
set rs=server.createobject("adodb.recordset")
sql="SELECT TOP m-n+1 * FROM gg WHERE (id NOT IN (SELECT TOP n-1 id FROM gg))"
rs.open sql,conn,1,1
if rs.eof and rs.bof then
Response.write "暂无"
else
do while not rs.eof
%>
<%=rs("title")%>
<%
rs.movenext
loop
end if
rs.close
set rs=nothing
%>
...全文
32 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovehwq21 2003-10-27
  • 打赏
  • 举报
回复
用TOP的方法拿取记录的时候,会随着WHERE条件或者ORDER、GROUP等条件的改变而改变,所以不用条件下TOP N取到的值都可能不同,所以直接用SQL语句实现不了,如果是ORACLE就可以实现,因为ORACLE有一个终身记录的ID,就是ROWID,那就可以用跟你那种方法类似的方法做。
建议你写个存储过程来实现

alter proc selmn
as
declare @sql varchar(2000), @n varchar(5),@m varchar(5)
set @n = '6' --设置范围
set @m = '5' --设置范围
select * into #tempn from RepeatTable where 1=2
select * into #tempm from RepeatTable where 1=2
exec(@sql)
set @sql='insert into #tempn select top '+@n+' * from RepeatTable'
exec(@sql)
set @sql='insert into #tempm select top '+@m+' * from RepeatTable'
exec(@sql)
select * from #tempn where id NOT IN(select id from #tempm)
Drop table #tempm
Drop table #tempn
go

exec selmn
这样来实现可以满足你的要求,保证记录取到的数是范围之内的
zytp 2003-10-27
  • 打赏
  • 举报
回复
to:yelloway(企鹅)
你的我试了,成功!谢谢!
to:skyarrow(谁敢偷我的奶酪?!)
你的思路,接受了,谢!
都给分啦,,结了!
yelloway 2003-10-27
  • 打赏
  • 举报
回复
可以做如下修改:
<!--#include file="conn.asp"-->
<%
dim rs,sql
dim m,n
n=1
m=10
dim a,b
a=m-n+1
b=n-1

set rs=server.createobject("adodb.recordset")
if a<>0 and b<>0 then
sql="SELECT TOP "&a&" * FROM gg WHERE (id NOT IN (SELECT TOP "&b&" id FROM gg))"
end if

if b=0 and a<>0 then
sql="SELECT TOP "&a&" * FROM gg"
end if

if a=0 and b=0 then

end if

rs.open sql,conn,1,1
if a=0 and b=0 then
Response.write "暂无"
else
do while not rs.eof
%>
<%=rs("title")%>
<%
rs.movenext
loop
end if
rs.close
set rs=nothing
%>
yelloway 2003-10-27
  • 打赏
  • 举报
回复
试了一下
select TOP n 语句中n不能为0,你刚才设置n=1的时候,n-1就是0,会出现错误
yelloway 2003-10-27
  • 打赏
  • 举报
回复
???这个sql语句对吗?
是不是应该是
dim a,b
a=m-n+1
b=n-1
然后sql语句改为
="SELECT TOP"&a&" * FROM gg WHERE (id NOT IN (SELECT TOP "&b&" id FROM gg))"

新手,如果不对请高手指教

感觉那个语法也不能完成你的要求

dim b
b=m-1

sql语句:
="SELECT TOP"&m&" * FROM gg WHERE (id NOT IN (SELECT TOP "&b&" id FROM gg))"

不知道我的理解对不对,错误的话请楼主和高手指教
vivisogood 2003-10-27
  • 打赏
  • 举报
回复
id是保留字段 。建议改id的字段名
或者用[id]
skyarrow 2003-10-27
  • 打赏
  • 举报
回复
记录是没有顺序概念的,除非你加了id等字段。
你要是有id字段,可以按照id中的数值取呀比如:...where n<id<m

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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