Sql server在选择顶行中使用变量[重复]
Posted
技术标签:
【中文标题】Sql server在选择顶行中使用变量[重复]【英文标题】:Sql server use variable in selection top row [duplicate] 【发布时间】:2016-05-18 11:48:19 【问题描述】:我有一个从 Table 中选择 top X 的存储过程,
declare @i int ;
set @i = 10 ;
select top @i from tableNam
“@i”附近的语法不正确。
我该怎么办?
假设@i 来自我的storedProcedure 中的参数
【问题讨论】:
SELECT TOP(@i)...
会起作用,而SELECT TOP @i...
不会。为什么?我不知道。
您没有在选择子句中包含任何列选择。
谢谢,这是我输的重点
【参考方案1】:
您必须将变量括在括号中才能使其工作。
declare @i int ;
set @i = 10 ;
select top (@i) * from tableNam
如果您将光标移到错误行,您会发现为什么需要这样的括号:
所以这个值应该是一个整数。此外,如果您从 MSDN 看到 TOP keyword,那么它会说使用括号。 MSDN所说的语法是:
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
【讨论】:
【参考方案2】:以下语法将起作用
declare @i int ;
set @i = 10 ;
select top (@i) * from sys.tables
【讨论】:
【参考方案3】:您可以使用动态查询来获取结果:
declare @i int ;
set @i = 10;
DECLARE @SqlQury VARCHAR(500) = '';
SET @SqlQury = 'SELECT TOP ' + CAST(@i AS VARCHAR) + ' * FROM tablename';
-- PRINT @SqlQury
EXEC (@SqlQury)
【讨论】:
忘记这是矫枉过正并且比它需要的复杂得多,它也会遇到更高数字的错误。你应该投给VARCHAR(10)
。如果您将10000000
转换为VARCHAR(5)
,则结果为*
,这意味着您最终得到的查询是SELECT * * FROM tablename
,这是行不通的。以上是关于Sql server在选择顶行中使用变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 - SELECT 子句中的 Case / If 语句 [重复]