如何从T-SQL中的表中选择前N行?

时间:2009-10-11 22:57:53

标签: sql database

有没有办法选择,例如,在T-SQL(工作MSSQL)中的前10行表? 我想我在Oracle中看到了一些定义为rownum元变量的东西,用于以下方式

select * from Users where rownum<=10
但是MSSQL呢?

7 个答案:

答案 0 :(得分:46)

select top(@count) * from users

如果@count是常量,则可以删除括号:

select top 42 * from users

(后者也适用于SQL Server 2000,前者至少需要2005年)

答案 1 :(得分:8)

SELECT TOP 10 *
FROM Users

请注意,如果您没有指定ORDER BY子句,则可以返回任意10行,因为“前10行”并不意味着什么,除非您告诉数据库使用什么订单。

答案 2 :(得分:7)

您可以使用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.

答案 3 :(得分:4)

你也可以使用rowcount,但TOP可能更好更清洁,因此Mehrdad的upvote

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

SET ROWCOUNT 0

答案 4 :(得分:1)

试试这个。

declare @topval int

set @topval = 5 (customized value)

SELECT TOP(@topval) * from your_database

答案 5 :(得分:0)

试试这个:

SELECT * FROM USERS LIMIT 10;

答案 6 :(得分:0)

  

SELECT TOP 10 * FROM TABLE_NAME ORDER BY ORDERED_UNIQUE_COLUMN   DESC

ORDERED_UNIQUE_COLUMN 可能是您的递增主键或时间戳