web-dev-qa-db-fra.com

Comment limiter le nombre de résultats renvoyés dans Sybase?

Je dois interroger une base de données Sybase qui contient beaucoup de données et je voudrais définir une limite pour que la base de données arrête la requête après 10 résultats.

L'essentiel est la performance, il serait donc inutile de rechercher tous les résultats, puis de renvoyer les 10 derniers résultats.

Merci d'avance

26
Ryan

Je pense que vous pouvez faire un SET ROWCOUNT 10 d'abord, puis toutes les requêtes de cette session jusqu'à ce que SET ROWCOUNT ne renverra pas plus de 10 lignes. Comme le souligne un commentaire, cela affecte tous les requêtes suivantes dans la session (pas seulement SELECTs!) Jusqu'à ce qu'elles soient désactivées (en définissant sur 0) ou définies différemment - ce "global" effet le rend moins pratique que la clause LIMIT typique des autres moteurs, qui est intrinsèquement par requête, mais je ne pense pas que vous puissiez faire quoi que ce soit à ce sujet.

22
Alex Martelli

Avec Sybase 12.5 et versions ultérieures, vous pouvez utiliser le prédicat supérieur dans votre instruction select. Il s'agit d'une fonctionnalité non ANSI que MSSQL possède depuis un certain temps.

select top 10 * from people

Vous ne pouvez pas utiliser top dans les sous-requêtes, les mises à jour ou les suppressions, et il n'y a pas de clause 'bottom' correspondante.

L'avantage de top est que vous n'avez pas à vous soucier de le réinitialiser. Ceci est particulièrement important si vous utilisez un pool de connexions de base de données.

42
brianegge

Je suis tombé sur ce problème et j'ai trouvé une réponse en utilisant TOP et START AT du document sybase remplaçant MySQL LIMIT. Vous devez utiliser ORDER BY pour ou vous aurez des résultats imprévisibles.

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

SELECT TOP 2 START AT 5 * FROM Employés ORDER BY Surname DESC;

1
Vadim Cote