【问题标题】:How to use variable in Select clause [closed]如何在 Select 子句中使用变量 [关闭]
【发布时间】:2020-11-30 14:42:15
【问题描述】:

我需要在 select 子句中调用变量的方法。 例如。表名“TableList”包含表名列表。

DECLARE @CounterNumber INT = 1
Declare @name varchar(255)
Set @name = (Select Name from TableList where id = @CounterNumber)
WHILE @CounterNumber <= 3

select top 10 * from @name
set @CounterNumber = @CounterNumber + 1

错误信息 - 必须声明表变量“@name”。

我也使用了“quotename()”,但仍然遇到同样的错误。

【问题讨论】:

  • 变量不能用来替换文字的名称。您实际上想在这里实现什么?以上将(如果它按您的预期工作)只是SELECT 10 来自同一个表的任意行;我怀疑这是故意的。

标签: sql sql-server ssms


【解决方案1】:

您需要使用动态 SQL:

WHILE @CounterNumber <= 3
BEGIN
    SELECT @name Name 
    FROM TableList 
    WHERE id = @CounterNumber;

    DECLARE @sql = NVARCHAR(MAX);

    SET @sql = 'select top 10 * from @name';

    SET @sql = REPLACE(@sql, '@name', quotename(@name));

    EXEC sp_executesql @sql;

    SET @CounterNumber = @CounterNumber + 1;
END;

【讨论】:

  • 如果不指定 @name 的值,这只会运行相同的查询 3 次。
猜你喜欢
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多