Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER - LES DIFFÉRENTES MÉTHODES POUR FAIRE UN LIMIT SOUS SQL SERVER


Information sur la source

Catégorie :Procédure Classé sous : limit, top Niveau : Initié Date de création : 12/01/2006 Date de mise à jour : 12/01/2006 13:53:06 Vu : 3 597

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note


Description

Tout le monde connait bien le TOP sous SQL Server, mais il possède un problème, car il est difficilement utilisable dans une procédure stockée ou le nombre de résultats doit être variable.
Voila donc une vision de quelques solutions existantes.
 

Source

  • DECLARE @Limit AS INT
  • SET @Limit = 3
  • ---------------------------------------------
  • -- Activation de la limite RowCount
  • SET ROWCOUNT @Limit
  • ---------------------------------------------
  • -- Requette utilisant la limite fixée
  • SELECT
  • *
  • FROM
  • dbo.Employees
  • ORDER BY
  • LastName;
  • ---------------------------------------------
  • -- Malgré le TOP fixé à 7, c'est le ROWCount qui est prioritaire
  • SELECT
  • TOP 7 *
  • FROM
  • dbo.Employees
  • ORDER BY
  • LastName;
  • ---------------------------------------------
  • -- Annulation de la limite
  • SET ROWCOUNT 0
  • ---------------------------------------------
  • -- Selection avec un TOP pour controler que la limite ne soit plus gérée
  • SELECT
  • TOP 7 *
  • FROM
  • dbo.Employees
  • ORDER BY
  • LastName;
  • ---------------------------------------------
  • -- Pour utiliser le paramètre de la limite dans un TOP
  • DECLARE @SQL AS VARCHAR(8000)
  • SET @SQL = 'SELECT TOP '+ CONVERT(VARCHAR(5), @Limit) +' * FROM dbo.Employees ORDER BY LastName';
  • EXECUTE (@SQL);
  • ---------------------------------------------
DECLARE @Limit 	AS INT
SET @Limit =	3

---------------------------------------------
-- Activation de la limite RowCount
SET ROWCOUNT 	@Limit

---------------------------------------------
-- Requette utilisant la limite fixée
SELECT 
	*
FROM
	dbo.Employees
ORDER BY
	LastName;

---------------------------------------------
-- Malgré le TOP fixé à 7, c'est le ROWCount qui est prioritaire
SELECT 
	TOP 7	*
FROM
	dbo.Employees
ORDER BY
	LastName;

---------------------------------------------
-- Annulation de la limite
SET ROWCOUNT 0

---------------------------------------------
-- Selection avec un TOP pour controler que la limite ne soit plus gérée
SELECT 
	TOP 7	*
FROM
	dbo.Employees
ORDER BY
	LastName;

---------------------------------------------
-- Pour utiliser le paramètre de la limite dans un TOP
DECLARE @SQL	AS VARCHAR(8000)

SET @SQL = 'SELECT TOP '+ CONVERT(VARCHAR(5), @Limit) +' * FROM dbo.Employees ORDER BY LastName';

EXECUTE (@SQL);
---------------------------------------------

Conclusion

Bon coding

Romelard Fabrice
 

Historique

12 janvier 2006 13:53:07 :
.

Commentaires et avis

signaler à un administrateur
Commentaire de jimmy69 le 20/01/2006 18:25:03

Salut salut Fab,

tu peux pas savoir comme ton code aurait pu m'aider l'an passe ! J'ai galere un max sur un projet php + Ms sql serveur 2000 !

Pour arriver a faire la fonction limit de mysql sous microsoft j'ai suivi cet exemple mais avant d'y arriver je galerais !

http://www.devparadise.com/technoweb/code/sql/a453.php

Merci pour tes nombreuses sources ...

A bientot ...
Christophe

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Mélange Sql ORDER BY et LIMIT [ par nemingway ] Bonjour, je trie une table selon deux paramètres (auteur, puis id). Est-il possible d'appliquer un LIMIT à chacun de ces tris, cad SELECT . Passer un paramètre au TOP dans une procedure stocké [ par gazza ] Pour ceux qui comme moi ou eu des problèmes avec le TOP @variable voici un peu d'aide ---------------------------------------------------------- Faire des blocs de ligne [ par ehmarc ] Salut,Voila j'ai encor un soucis....Je doit faire des group de 15000 ligne de donnée (ma table à 90 000 lignes)Sous SQL server c'est pas top (à cause Select paginé [ par thiosyiasar ] Bonjour a tous,Pour une page aspx, je voudrais faire un select paginé du genre : SELECT TOP (@nb_ligne) * FROM newsletter WHERE nlt_id in(  SELECT nlt SQL CE, top, join [ par gzitoun ] Bonjour,je decouvre SQL CE.Pourriez vous svp me confirmer un point: il me semble que TOP (select top 5 * par exemple) ne marche pas, est ce vrai?Qu en Requete qui ne renvoie pas ce que je veux [ par raph37 ] Salut tlm !Voilà j'ais un petit souci avec ma requette SQL textuelement , je voudrais faire une selection complete de ma table , puis la trier par ID TOP multiple en une seule requête... [ par soobook ] Bonjour,Cette question a peut-être déjà été posée, mais je n'ai pas trouvé, donc...Je souhaite créer une requête qui me renvoie chaque semaine le top programmation pl/sql [ par perle00 ] salut tt le mondej'ai besoin de votre aide pour résoudre cet exercice.1.créer la table TOP_DOGS afin d'y stocker les employés et leur salaire.2.créer


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.