sql - 如何解决 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).
现在它抛出这个错误:“'='附近的语法不正确”
解决方案
当执行动态 SQL 时,它是在不同的范围内varchar
执行的,所以如果你用 SQL 语句将你的变量声明在与 bariable相同的范围内,你会得到这样的错误。
正确的做法是:
EXECUTE ('DECLARE @lnRowIdMin INT; SELECT @lnRowIdMin = MIN(TMP_ROW_ID) FROM #' + @lvcBaseTable)
但是您无法从动态 SQL 外部访问此变量,我认为这是您想要的。
解决此问题的两种方法:
- 将使用该变量的代码也放入动态 SQL 中。
- 将值插入某个临时表中,然后您可以在动态 SQL 之外使用它,只是
SELECT
对临时表执行。
推荐阅读
- timestamp - kSQL - 按时间戳将表分组为每分钟的字符串
- python - AttributeError:“str”对象没有属性“unitPrice”
- python - 如何将一列中带有变量的csv加载到数据框中
- android - 如何将相同的圆角设置为线性布局?
- javascript - AMCharts 问题:堆叠时我的 XY DateAxis 缩小到 1970
- function - 使用比较器功能时超出内存限制
- python - 根函数在 statsmodels 中如何工作?
- android - 样式不起作用 Material Design Android Studio
- java - 通过 Liquibase 在文件搜索 master.xml 中构建 Travis CI 的问题
- julia - 使用特殊字符“>”在 Julia 中运行外部程序