为何SQL Server中declare @x int = 1, @y int = @x;语句无法执行?
为什么T-SQL中
declare @x int = 1, @y int = @x;会报错? 执行以下T-SQL代码:
declare @x int = 1, @y int = @x;
会触发报错:
必须声明标量变量 "@x"。
查阅DECLARE关键字的官方文档时,仅提到“可以指定多个变量并赋值”,并未详细解释该报错的原因。
正确原因
在SQL Server的T-SQL语法中,同一DECLARE语句内的变量初始化操作是并行执行的,没有明确的先后顺序。也就是说,当处理@y int = @x这个初始化逻辑时,@x的初始化流程还未完成,此时@x在当前的初始化上下文中尚未被视为已声明的可用变量,因此无法被引用。
这种机制和SELECT语句中列表达式的求值逻辑类似——所有表达式都是同时计算,不依赖代码的书写顺序。哪怕你把@x写在前面,SQL Server也不会先完成@x的初始化再处理@y。
正确写法
要实现预期逻辑,需要拆分DECLARE语句,或者先声明所有变量再逐一赋值:
-- 方式1:拆分DECLARE语句 declare @x int = 1; declare @y int = @x; -- 方式2:先声明变量,再分别赋值 declare @x int, @y int; set @x = 1; set @y = @x;
内容的提问来源于stack exchange,提问作者Expo Managed
相关产品推荐
相关产品推荐

