Sql server在选择顶行使用变量

时间:2016-05-18 11:48:20

标签: sql sql-server

我有一个存储过程,从表中选择前X,

declare @i int ;
set @i = 10 ;
select top @i from tableNam
  

'@i'附近的语法不正确。

我该怎么办?

假设@i来自我的storedProcedure

中的参数

3 个答案:

答案 0 :(得分:2)

以下语法将起作用

declare @i int ;
set @i = 10 ;
select top (@i) * from sys.tables

答案 1 :(得分:2)

您必须将变量括在括号中才能使其正常工作。

declare @i int ;
set @i = 10 ;
select top (@i) * from tableNam

如果您将光标移至错误行,您将找到原因,为什么您需要这样的括号:

enter image description here

因此该值应为整数。此外,如果您从MSDN中看到TOP keyword,则表示使用括号。 MSDN所说的语法是:

[ 
    TOP (expression) [PERCENT]
    [ WITH TIES ]
]

答案 2 :(得分:0)

您可以使用动态查询来获得结果:

declare @i int ;
set @i = 10;

DECLARE @SqlQury VARCHAR(500) = '';
SET @SqlQury = 'SELECT TOP ' + CAST(@i AS VARCHAR) + ' * FROM tablename';
-- PRINT @SqlQury
EXEC (@SqlQury)