2016-02-03 24 views
0

打电话给我一个noob--或者我没有提出正确的问题,但我仔细研究了一下解决方案,即使我声明了我的变量,也是得到了SQL Server的Msg 137错误。MSG 137:当声明变量DECLARE/SET/QUERY必须同时运行

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

有很多的问题,在那里,解决这个问题,但在不同环境下和,说实话,大多数人,当他们得到这个错误,如变量越界得多的技术问题。 所以这个问题/答案更多的是刚刚测试声明/设置/使用变量的初学者。

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

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

回答

0

原来我得到错误的原因是因为我一行一行地运行代码。

事实证明,变量只存在于查询期间(批处理),所以一旦我运行了declare查询,变量就被抹掉了。 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';