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

表变量仅作用于批处理?为何GO语句后仍可查询@t?

批处理、会话与表变量作用域的误区

你的前两个认知完全正确:

  • 表变量(如@t)的作用域仅限声明它的批处理,跨批处理无法访问
  • GO是SQL Server的批处理分隔符,它会结束当前批处理,后续语句属于全新的独立批处理

问题出在你的第三个观察——这个脚本必然会报错,不存在“未抛出错误”的正常执行场景。当执行GO之后的select * from @t时,SQL Server会抛出必须声明标量变量 "@t"的错误,因为新批处理中从未声明过该表变量。

如果你的测试显示没有报错,大概率是以下情况导致的误解:

  • 仅执行了GO之前的语句段,未运行后续查询
  • 测试工具的输出未完整展示错误信息
  • 混淆了其他脚本的执行结果

内容的提问来源于stack exchange,提问作者J. Mini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:22:03