MSG 137:当声明变量时,DECLARE / SET / QUERY必须同时运行

时间:2016-02-03 17:45:44

标签: sql sql-server-2008-r2 ssms

叫我一个菜鸟 - 或者我也没有问正确的问题,但我看了一遍解决为什么我得到SQL Server的Msg 137错误,即使我宣布了我的错误变量

Msg 137, Level 15, State 1, Line 1
Must declare the scalar variable "@myVar".

有很多问题可以解决这个问题,但是在不同的情况下,说实话,大多数人在遇到这样的错误时会有更多的技术问题,例如变量超出范围。 所以这个问题/答案更适用于刚刚测试声明/设置/使用变量的初学者。

这些是我在遇到错误时运行的查询。最后,一位同事对这个问题进行了阐述(见下面的答案)。

declare @myVar varchar(20);
set @myVar = 'hello';
print @myVar;

1 个答案:

答案 0 :(得分:0)

事实证明我得到错误的原因是因为我一行一行地运行代码。

事实证明,变量仅在查询(批处理)的持续时间内存在,因此一旦我运行了声明查询,该变量就已经从内存中消失了。 SQL Server Pro能够进一步阐明我的问题,该问题讨论了T-SQL中仅限本地的变量支持。

  

T-SQL仅支持局部变量。局部变量仅在创建它的批处理中可用。批处理是SQL Server作为一个单元解析的T-SQL语句(或语句组)。每个客户端工具或接口都有自己的方式来指定批处理的结束位置。例如,在查询分析器中,使用GO命令指定批处理的结束位置。

对于预先单独声明和设置

的SQL Server 2008之前,还有很多答案
DECLARE @myVar VARCHAR(100);
SET @myVar = 'Some Value';

但是2008+允许您在同一行声明和设置变量。

DECLARE @myVar VARCHAR(100) = 'Some Value';