Как выбрать первые N строк из таблицы в T-SQL? - PullRequest
17 голосов
/ 12 октября 2009

Можно ли, например, выбрать первые 10 строк таблицы в T-SQL (работает MSSQL)?
Я думаю, что видел в Oracle что-то, определенное как мета-переменная rownum, используемое следующим

select * from Users where rownum
Но как насчет MSSQL?

Ответы [ 7 ]

46 голосов
/ 12 октября 2009
select top(@count) * from users

Если @count является константой, вы можете опустить скобки:

select top 42 * from users

(последний работает и на SQL Server 2000, в то время как первый требует как минимум 2005)

8 голосов
/ 12 октября 2009
SELECT TOP 10 *
FROM Users

Обратите внимание, что если вы не укажете предложение ORDER BY, тогда могут быть возвращены любые 10 строк, поскольку «первые 10 строк» ​​ничего не значат, пока вы не сообщите базе данных, в каком порядке использовать.

7 голосов
/ 17 мая 2013

Вы можете использовать функцию row_number () от Microsoft, чтобы решить, какие строки возвращать. Это означает, что вы не ограничены только лучшими результатами X, вы можете брать страницы.

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

Вы должны вложить исходный запрос, потому что в противном случае вы получите сообщение об ошибке, сообщающее, что вы не можете делать то, что хотите, так, как вы, вероятно, должны быть в идеальном мире.

Msg 4108, Level 15, State 1, Line 3
Windowed functions can only appear in the SELECT or ORDER BY clauses.
4 голосов
/ 12 октября 2009

Вы также можете использовать rowcount, но TOP, вероятно, лучше и чище, отсюда и повышение рейтинга Mehrdad

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

SET ROWCOUNT 0
1 голос
/ 20 декабря 2013

Попробуйте это.

declare @topval int

set @topval = 5 (customized value)

SELECT TOP(@topval) * from your_database
0 голосов
/ 13 декабря 2017

ВЫБРАТЬ ТОП 10 * ИЗ TABLE_NAME ЗАКАЗАТЬ ORDERED_UNIQUE_COLUMN DESC

ORDERED_UNIQUE_COLUMN может быть вашим увеличивающимся первичным ключом или отметкой времени

0 голосов
/ 12 октября 2009

Попробуйте это:

SELECT * FROM USERS LIMIT 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...