You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:52:37