首页 > 解决方案 > 如何解决 sql server 动态查询中的“必须声明标量变量”问题?

问题描述

我正在尝试在 sql server 中执行此语句:

EXECUTE ('SELECT @lnRowIdMin = MIN(TMP_ROW_ID) FROM  #' + @lvcBaseTable).

这里@lnRowIdMin被声明为一个整数变量,并@lvcBaseTable在我的原始代码中被声明为一个 varchar(255) 变量。

执行原始代码会引发上述语句的错误:

必须声明标量变量

然后我将语句更改为:

EXECUTE ('SELECT ' + @lnRowIdMin + ' = MIN(TMP_ROW_ID) FROM  #' + @lvcBaseTable).

现在它抛出这个错误:“'='附近的语法不正确”

标签: sqlsql-serverdynamicquery

解决方案


当执行动态 SQL 时,它是在不同的范围内varchar执行的,所以如果你用 SQL 语句将你的变量声明在与 bariable相同的范围内,你会得到这样的错误。

正确的做法是:

EXECUTE ('DECLARE @lnRowIdMin INT; SELECT @lnRowIdMin = MIN(TMP_ROW_ID) FROM  #' + @lvcBaseTable)

但是您无法从动态 SQL 外部访问此变量,我认为这是您想要的。

解决此问题的两种方法:

  1. 将使用该变量的代码也放入动态 SQL 中。
  2. 将值插入某个临时表中,然后您可以在动态 SQL 之外使用它,只是SELECT对临时表执行。

推荐阅读