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 - 如何使部分重复的行从原始行继承值

通过选择可能为空的顶行进行 SQL 分组

选择 Mariadb 中除顶行以外的所有行

SQL Server 2008 - SELECT 子句中的 Case / If 语句 [重复]

C# - 使项目 MySQL 和 SQL Server 兼容

如何使MongoDB的列成为SQL Server中发生的主键,避免重复记录?