web-dev-qa-db-fra.com

comment sélectionner les N premières lignes d'une table dans T-SQL?

Est-il possible de sélectionner, par exemple, les 10 premières lignes d'une table dans T-SQL (MSSQL actif)?
Je pense avoir vu quelque chose dans Oracle défini comme une variable méta rownum, utilisée de la manière suivante

 sélectionnez * parmi Utilisateurs où rownum <= 10 
Mais qu'en est-il de MSSQL?

17
dragan.stepanovic
select top(@count) * from users

Si @count est une constante, vous pouvez supprimer les parenthèses:

select top 42 * from users

(le dernier fonctionne aussi sur SQL Server 2000, alors que le premier nécessite au moins 2005)

45
Mehrdad Afshari
SELECT TOP 10 *
FROM Users

Notez que si vous ne spécifiez pas de clause ORDER BY , toutes les 10 lignes peuvent être renvoyées, car les "10 premières lignes" ne signifient rien avant que vous indiquiez à la base de données quel ordre utiliser.

8
LukeH

Vous pouvez utiliser la fonction row_number () de Microsoft pour décider des lignes à renvoyer. Cela signifie que vous n'êtes pas limité aux seuls X meilleurs résultats, vous pouvez prendre des pages.

SELECT * 
FROM (SELECT row_number() over (order by UserID) AS line_no, * 
      FROM dbo.User) as users
WHERE users.line_no < 10
OR users.line_no BETWEEN 34 and 67

Cependant, vous devez imbriquer la requête d'origine, car sinon, vous obtiendrez un message d'erreur vous indiquant que vous ne pouvez pas faire ce que vous voulez comme vous devriez pouvoir le faire dans un monde idéal.

Msg 4108, Level 15, State 1, Line 3
Windowed functions can only appear in the SELECT or ORDER BY clauses.
7
Jonathan

Vous pouvez également utiliser rowcount, mais TOP est probablement meilleur et plus propre, d’où le vote favorable de Mehrdad.

SET ROWCOUNT 10
SELECT * FROM dbo.Orders
WHERE EmployeeID = 5
ORDER BY OrderDate

SET ROWCOUNT 0
4
ChickenMilkBomb

Essaye ça.

declare @topval int

set @topval = 5 (customized value)

SELECT TOP(@topval) * from your_database
1
Rameshwar Pawale

SÉLECTIONNER LE TOP 10 * FROM TABLE_NAME ORDER BY ORDERED_UNIQUE_COLUMN . DESC

ORDERED_UNIQUE_COLUMN pourrait être votre clé primaire incrémentante ou un horodatage

0
Rahul

Essaye ça:

SELECT * FROM USERS LIMIT 10;
0
RPL