如何在Sybase中限制返回结果的数量?

35

我需要查询一个Sybase数据库,其中包含大量数据,并希望设置限制,以便在返回10个结果后停止查询。

关键是性能,如果搜索所有结果然后返回最后10个结果将毫无用处。

提前感谢。


你想要哪10个?前10个? - martin clayton
3个回答

58

在Sybase 12.5及更高版本中,您可以在选择语句中使用top谓词。这是一个非ANSI功能,而MSSQL已经有了相当长的时间。

select top 10 * from people

在子查询、更新或删除中无法使用 top,也没有相应的“bottom”子句。

使用 top 的好处是您不必担心重置它。如果您正在使用数据库连接池,则这一点尤为重要。


它对UPDATE和DELETE同样有效。UPDATE TOP 10 FROM people...DELETE TOP 10 people请参阅http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.doc.ase_docs_12.5.3.newfeatures1253_rev/html/newfeatures1253_rev/newfeatures1253_rev11.htm - Mike Shauneu
有没有办法在子查询中使用“top”表达式,就像这样? select * from table1 where OID IN (select top 20 * from table2) - Huseyin

24

我认为你可以先使用 SET ROWCOUNT 10 命令,然后在这个会话中的所有查询直到进一步使用 SET ROWCOUNT 命令时,都只返回不超过10行。正如一条评论指出的那样,这会影响该会话中所有后续查询(不仅仅是SELECT语句!),直到将其关闭(通过设置为0)或以不同方式设置 -- 这种“全局”效果使它比其他引擎典型的LIMIT子句不太方便,后者本质上是每个查询的限制,但我认为你对此无能为力。


9
执行 SET ROWCOUNT 0 可以关闭行数限制。 - martin clayton
2
同样值得强调的是,当它设置为非零值时,其他语句(例如更新和删除)也会受到影响。 - Hobo

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接