动态SELECT TOP @var在SQL Server中

edd*_*ves 291 sql sql-server-2005

如何设置动态变量来设置SQL Server中要返回的行数?以下是SQL Server 2005+中无效的语法:

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable
Run Code Online (Sandbox Code Playgroud)

Bri*_*Kim 531

SELECT TOP (@count) * FROM SomeTable
Run Code Online (Sandbox Code Playgroud)

这仅适用于SQL 2005+

  • 我也总是忘记括号. (49认同)
  • 这很棒!这段时间我以为我不得不使用动态sql. (11认同)
  • 还有谁意识到他们的查询中没有添加括号而犯了愚蠢的错误? (3认同)

x0n*_*x0n 39

语法"select top(@var)..."仅适用于SQL SERVER 2005+.对于SQL 2000,您可以执行以下操作:

set rowcount @top

select * from sometable

set rowcount 0 
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

[287]莪.

(编辑用rowcount替换@@ rowcount - 感谢augustlights)

  • 我听说如果你有多列主键,@@RowCount 可能会得到不正确的行号。真的吗? (2认同)

Cod*_*rks 11

在x0n的例子中,它应该是:

SET ROWCOUNT @top

SELECT * from sometable

SET ROWCOUNT 0
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/ms188774.aspx


Dav*_*tro 8

declare @rows int = 10

select top (@rows) *
from Employees
order by 1 desc -- optional to get the last records using the first column of the table
Run Code Online (Sandbox Code Playgroud)


小智 5

或者你只是把变量放在括号里

DECLARE @top INT = 10;

SELECT TOP (@Top) *
FROM <table_name>;
Run Code Online (Sandbox Code Playgroud)