【问题标题】:Sql server use variable in selection top row [duplicate]Sql server在选择顶行中使用变量[重复]
【发布时间】: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... 不会。为什么?我不知道。
  • 您没有在选择子句中包含任何列选择。
  • 谢谢,这是我输的重点

标签: sql sql-server


【解决方案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,这是行不通的。
      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 2016-02-26
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      相关资源
      最近更新 更多