web-dev-qa-db-fra.com

Quel est l'équivalent T-SQL de la syntaxe MySQL LIMIT x, y?

Duplicate possible:
Comment écrire un “LIMIT” (MySQL) dans SQL Server?

Comment puis-je changer ma requête avec LIMIT Inside pour un serveur SQL?

Code:

SELECT apretiz FROM tableApoint WHERE price = '$newprice' LIMIT 5;

Beaucoup de choses ne fonctionnent pas alors il suffit de demander de l'aide

Et comment puis-je changer LIMIT 5,10 par exemple? Puis-je utiliser TOP pour cela?

15
pretyBoy

Comme je l'ai dit il y a moins d'une heure, vous devez utiliser TOP! (LIMIT est utilisé pour MYSQL) 

Essayez donc de supprimer LIMIT 5 et faites SELECT TOP(5) apretiz.

Aussi, essayez d’ajouter ordre par (même raison qu’avant).

S'il vous plaît faire une recherche avant de demander des choses. Lien vers une ancienne question

16
ChapMic

À partir de SQL Server 2012, vous pouvez écrire

...
ORDER BY thisColumn, thatColumn
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY
20
Steve Kass

Utilisez le mot clé TOP:

 SELECT TOP 5 pretiz 
 FROM tableApoint WHERE price = '$newprice'

L'utilisation de LIMIT 5, 10 ne fait pas partie de SQL Standard et n'est disponible que dans MySQL.

Vous pouvez utiliser ROW_NUMBER() pour SQL en tant que solution temporaire et vous obtiendrez le même résultat souhaité.

SELECT * FROM ( 
  SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM tableApoint 
) a WHERE row >= 5 and row <= 10
3
Darren

SQL Server 2005 et supérieur

Si vous utilisez SQL Server 2005 et versions ultérieures, vous pouvez utiliser la fonction ROW_NUMBER pour affecter des numéros uniques à vos lignes, puis sélectionner la plage de valeurs dans la sortie.

Script :

CREATE TABLE table1
(
    textvalue VARCHAR(10) NOT NULL
);

INSERT INTO table1 (textvalue) VALUES
   ('i'),
   ('a'),
   ('e'),
   ('h'),
   ('c'),
   ('l'),
   ('g'),
   ('m'),
   ('d'),
   ('k'),
   ('j'),
   ('f'),
   ('b'),
   ('n');

;WITH letters as
(
    SELECT  textvalue
        ,   ROW_NUMBER() OVER(ORDER BY textvalue) rownum 
    FROM    table1
)
SELECT  textvalue
FROM    letters
WHERE   rownum  BETWEEN 6 AND 10;

Sortie :

TEXTVALUE
---------
    f
    g
    h
    i
    j
2
user756519