mssql中,如何返回指定第几到第几条之间的记录

用top可以返回前n条,但如果一个查询结果有100条数据我只想返回第20-30条之间的数据,可以实现吗如果可以实现,那我指明返回的是第90-110条时,会报错吗,如何避免... 用top可以返回前n条,但如果一个查询结果有100条数据
我只想返回第20-30条之间的数据,可以实现吗

如果可以实现,那我指明返回的是第90-110条时,会报错吗,如何避免这样的错误(另加20分)
展开
 我来答
WHITE_WIN
推荐于2016-04-02 · TA获得超过6111个赞
知道大有可为答主
回答量:3759
采纳率:50%
帮助的人:1903万
展开全部
第20-30条:
select top 30 * from tablename a where a.id not in(select top 20 id from tablename)
你是想用变量代替TOP 后面的数字吧?那要看你是在前台组成语句还是在后台了。
在前台:
SQLSTR="select top "+大号变量+" * from tablename a where a.id not in(select top "+小号变量+" id from tablename)";
在后台要用动态SQL语句才行
exec ('select top '+@大号变量+' * from tablename a where a.id not in(select top '+@小号变量+' id from tablename')
============================
这样通用性更强一些:
DECLARE
@SQLSTR VARCHAR(1000),
@TABLENAME VARCHAR(30),
@MAXLINE INT,
@MINLINE INT,
@IDFIELD
SET @SQLSTR='select top '+CAST(@line AS VARCHAR)+' * from '+@tablename+' where '+@idfield+' in (select top '+CAST(@MAXLINE AS VARCHAR)+' '+@idfield+' from '+@TABLENAME+' a where '+@idfield+' not in (select top '+CAST(@MINLINE-1 AS VARCHAR)+' '+@idfield+' from '+@tablename+'))'
EXEC (@SQLSTR)

==========
干脆来一个存储过程,输入页码,表名,ID字段名,每页行数即可输出相应的记录:
CREATE PROCEDURE PAGEN
@PAGE INT,--第几页
@LINE INT,--每页行数
@TABLENAME VARCHAR(100),--表名
@IDFIELD VARCHAR(100) --用于唯一确定一条记录的ID字段名
AS
DECLARE @MAXLINE INT,@MINLINE INT,@SQLSTR VARCHAR(1000)
SET @MINLINE=(@PAGE-1)*@LINE+1--从这一行
SET @MAXLINE=@PAGE*@LINE--显示到这一行
SET @SQLSTR='select top '+CAST(@line AS VARCHAR)+' * from '+@tablename+' where '+@idfield+' in (select top '+CAST(@MAXLINE AS VARCHAR)+' '+@idfield+' from '+@TABLENAME+' a where '+@idfield+' not in (select top '+CAST(@MINLINE-1 AS VARCHAR)+' '+@idfield+' from '+@tablename+'))'
SELECT @SQLSTR
exec (@SQLSTR)
GO
使用:

EXEC PAGEN 3,10,'tablename','id'
Jarhf
2008-11-13 · TA获得超过1862个赞
知道小有建树答主
回答量:1736
采纳率:25%
帮助的人:1028万
展开全部
还是MySql好,要返回m-n之间的记录,很简单
select * from tab1 limit m,n (m,n都是从0开始计数)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7ea6fe8
2008-11-13 · TA获得超过1103个赞
知道大有可为答主
回答量:1815
采纳率:0%
帮助的人:1356万
展开全部
..你只想返回20条 那就选TOP 20条啊

或者循环时加个记数 记够20条就跳出循环

又或者设置记录对象的每页数量为20(pagesize)

指明返回90-110当然会出错了,为避免出错当然是每次输出前先判断指针是否已到记录尾(即最终记录)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7e68b5b
2008-11-13
知道答主
回答量:3
采纳率:0%
帮助的人:4876
展开全部
不能用between字句吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式