有没有办法选择,例如,在T-SQL(工作MSSQL)中的前10行表?
我想我在Oracle中看到了一些定义为rownum元变量的东西,用于以下方式
__PRE__但是MSSQL怎么样?
Meh*_*ari 46
select top(@count) * from users
Run Code Online (Sandbox Code Playgroud)
如果@count是常量,则可以删除括号:
select top 42 * from users
Run Code Online (Sandbox Code Playgroud)
(后者也适用于SQL Server 2000,而前者至少需要2005)
SELECT TOP 10 *
FROM Users
Run Code Online (Sandbox Code Playgroud)
请注意,如果您没有指定一个ORDER BY子句,则可以返回任何10行,因为"前10行"并不意味着什么,直到您告诉数据库使用什么顺序.
您可以使用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
Run Code Online (Sandbox Code Playgroud)
您必须嵌套原始查询,否则您将收到一条错误消息,告诉您无法以理想世界中的方式执行您想要的操作.
Msg 4108, Level 15, State 1, Line 3
Windowed functions can only appear in the SELECT or ORDER BY clauses.
Run Code Online (Sandbox Code Playgroud)
你也可以使用 rowcount,但 TOP 可能更好更干净,因此对 Mehrdad 的支持
SET ROWCOUNT 10
SELECT * FROM dbo.Orders
WHERE EmployeeID = 5
ORDER BY OrderDate
SET ROWCOUNT 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109820 次 |
| 最近记录: |