2009-10-11 5 views
13

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

 
select * from Users where rownum<=10 
А как насчет MSSQL?

+1

Стоит также заметить, что если вы хотите получить 10 лучших результатов в Oracle, вам нужно написать выберите * from (выберите * from Users order by UserName), где rownum <= 10 Rownum рассчитывается во-первых, перед заказом. – LukLed

+0

@Lukled То же самое верно, если вы используете row_number() over() в mssql: http://stackoverflow.com/a/16610654/6910 – Jonathan

ответ

42
select top(@count) * from users 

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

select top 42 * from users 

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

7
SELECT TOP 10 * 
FROM Users 

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

+0

+1 для отличия 'order by'. Заказ без 'order by' * никогда не гарантируется SQL Server. – Eric

4

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

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

SET ROWCOUNT 0 
+0

это способ параметризации верхних N строк в версиях SQL Server до 2005 года. –

0

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

SELECT * FROM USERS LIMIT 10; 
+1

Имейте в виду, что это не работает в MSSQL, но работает в MySql. – Jonathan

7

Вы можете использовать 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. 
1

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

declare @topval int 

set @topval = 5 (customized value) 

SELECT TOP(@topval) * from your_database 
0

ВЫБРАТЬ TOP 10 * FROM TABLE_NAME ORDER BY ORDERED_UNIQUE_COLUMN DESC

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

Смежные вопросы