[英]How to fix "Must declare the scalar variable" issue in sql server dynamic query?
我正在尝试在 sql server 中执行此语句:
EXECUTE ('SELECT @lnRowIdMin = MIN(TMP_ROW_ID) FROM #' + @lvcBaseTable).
在我的原始代码中, @lvcBaseTable
@lnRowIdMin
被声明为一个整数变量, @lvcBaseTable
被声明为一个 varchar(255) 变量。
执行原代码抛出上述语句的错误:
必须声明标量变量
然后我将语句更改为:
EXECUTE ('SELECT ' + @lnRowIdMin + ' = MIN(TMP_ROW_ID) FROM #' + @lvcBaseTable).
现在它抛出这个错误:“'='附近的语法不正确”
在执行动态 SQL 时,它是在不同的范围内执行的,因此如果您使用 SQL 语句将变量声明在与varchar
bariable 相同的范围内,则会出现此类错误。
正确的做法是:
EXECUTE ('DECLARE @lnRowIdMin INT; SELECT @lnRowIdMin = MIN(TMP_ROW_ID) FROM #' + @lvcBaseTable)
但是,您无法从动态 SQL 外部访问此变量,我认为这正是您想要的。
解决这个问题的两种方法:
SELECT
。 @lnRowIdMin
, @lnRowIdMin
是在动态 SQL 之外声明的,并且需要分配值。 因此,您需要参数化您的 SQL,并使用OUTPUT
参数:
--Prior stuff here, including declaration of @lnRowIdMin
DECLARE @SQL nvarchar(MAX),
@Param nvarchar(MAX);
SET @SQL = N'SELECT @lnRowIdMin = MIN(TMP_ROW_ID) FROM ' + QUOTENAME(N'#' + @lvcBaseTable) + N';';
SET @Param = N'@lnRowIdMin int OUTPUT'; --Guessed datatype
EXEC sp_executesql @SQL, @Param, @lnRowIdMin = @lnRowIdMin OUTPUT;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.