Как выбрать первые N строк из таблицы в T-SQL?

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

выберите * from Users, где rownum < = 10
Но как насчет MSSQL?

Ответы

Ответ 1

select top(@count) * from users

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

select top 42 * from users

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

Ответ 2

SELECT TOP 10 *
FROM Users

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

Ответ 3

Вы можете использовать функцию Microsoft row_number(), чтобы решить, какие строки возвращаться. Это означает, что вы не ограничены только лучшими результатами 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

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

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

SET ROWCOUNT 0

Ответ 5

Попробуйте следующее:

SELECT * FROM USERS LIMIT 10;

Ответ 6

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

declare @topval int

set @topval = 5 (customized value)

SELECT TOP(@topval) * from your_database

Ответ 7

SELECT TOP 10 * FROM TABLE_NAME ORDER BY ORDERED_UNIQUE_COLUMNDESC

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