我正在阅读一些存储过程,我偶然发现了一些声明如下的变量:
set @@cstr1 = @@cKod1
set @@pom1 = 1
'@@'有什么作用?这与'@'有什么不同?
答案 0 :(得分:5)
以单个@前缀开头的局部变量,变量的范围是可以引用变量的Transact-SQL语句的范围。变量的范围从声明它的位置延迟到声明它的批处理或存储过程的结尾。
以@@前缀开头的全局变量,您不需要声明它们,因为服务器不断维护它们,它们是系统定义的函数而不是变量,并且没有与变量相同的行为。所有全局变量表示特定于服务器或当前用户会话的信息。一些常用的是@@ ERROR,@ @ IDENTITY,@@ VERSION。
<强>更新强> 使用@@前缀声明任何变量(系统定义除外)实际上是局部变量。
答案 1 :(得分:1)
本地变量由用户声明,可以在过程或批处理的SQL语句中用于保存信息。全局变量是系统提供的变量,提供系统提供的值。所有全局变量的名称都以两个@符号开头。例如,全局变量@@ version的值是数据库引擎的当前版本号。用户无法定义全局变量。
但是将@@声明为局部变量
是正确的