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

Rya*_*yan 26 sql sybase limit

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

关键是性能,所以如果它搜索所有结果然后返回最后10个结果就没用了.

提前致谢

bri*_*gge 44

使用Sybase 12.5及更高版本,您可以在select语句中使用top谓词.这是一个非ANSI特性,MSSQL已经有很长一段时间了.

select top 10 * from people
Run Code Online (Sandbox Code Playgroud)

您不能在子查询,更新或删除中使用top,并且没有相应的"bottom"子句.

top的优点是你不必担心重置它.如果您使用数据库连接池,这一点尤为重要.


Ale*_*lli 22

我相信你可以先做SET ROWCOUNT 10,然后在这个会话中进行所有查询,直到进一步SET ROWCOUNT返回不超过10行.正如评论所指出的,这会影响会话中的所有后续查询(不仅仅是SELECTs!),直到关闭(通过设置为0)或设置不同 - 这种"全局"效果使其不如LIMIT其他引擎的典型子句方便,这本质上是每个查询,但是,我不认为你可以做任何事情.

  • 并且SET ROWCOUNT 0关闭行数限制. (8认同)
  • 同样值得强调的是,当它被设置为非零值时,其他语句(例如更新和删除)将受到影响 (2认同)

小智 5

我碰巧偶然发现了这个问题,并使用 TOP 和 START AT 从 sybase doc 替换了 MySQL LIMIT 找到了答案。您需要使用 ORDER BY 否则您将获得不可预测的结果。

http://dcx.sybase.com/1101/en/dbusage_en11/first-order-formatting.html

SELECT TOP 2 START AT 5 * FROM Employees ORDER BY Surname DESC;