原始问题:
declare @num as int set @num = 5
select top @num col1, col2 from table1
以上不起作用。它不喜欢以这种方式使用@num。需要做什么,以便我可以在top命令旁边有一个变量值?
它给出错误:
'@num'附近的语法不正确
答案 0 :(得分:10)
SELECT TOP (@num) a FROM table
从SQL Server 2005开始,支持参数化TOP。
答案 1 :(得分:5)
SQL Server 2000以后:
declare @num as int
set @num = 5
SET ROWCOUNT @num
select col1, col2 from table1
SET ROWCOUNT 0
更新:实际上,你确定这不起作用(我没有2005实例):
declare @num as int
set @num = 5
select TOP (@num) col1, col2 from table1
-- Implictly in clustered index order...
答案 2 :(得分:4)
在括号中
declare @num as int set @num = 5
select top (@num) col1, col2 from table1
答案 3 :(得分:3)
您必须将变量包装在括号中
declare @num int
set @num = 5
select top (@num) col1, col2 from table1
答案 4 :(得分:0)
使用字符串连接和sp_executesql是实现这一目的的一种方法......
将@num声明为int set @num = 5
declare @sql varchar(255)
select @sql = 'select top ' + @num + ' col1, col2 from table1'
sp_executesql @sql
答案 5 :(得分:0)
试试这个:
DECLARE @num AS INT
DECLARE @SQL AS NVARCHAR(MAX)
SET @num = 5
SET @SQL = N'select top ' + CAST(@num AS VARCHAR(5)) + ' col1, col2 from table1'
EXECUTE sp_executesql @SQL
答案 6 :(得分:0)
尝试使用动态SQL
类似这样的事情
declare @dynamicsql nvarchar(4000);
declare @num as int;
set @num = 5
set @dynamicsql = 'select top ' + convert(nvarchar, @num) + ' col1, col2 from table1';
exec @dynamicsql;
答案 7 :(得分:-1)