发生致命的脚本错误。变量未定义

A fatal scripting error occurred. Variable is not defined

当我 运行 在 SSMS 2017 和 SQL 服务器数据库中以 SQLCMD 模式查询此查询时。它工作正常。

--SQLCMD mode
--DECLARE Global variables
:SETVAR daysBack  -1
SELECT $(daysBack)

结果:-1

如果我运行只有1行

SELECT $(daysBack)

在同一连接上的同一 window 中,或在另一个选项卡中。我遇到错误

发生致命的脚本错误。 未定义变量 daysBack。

为什么我会收到错误消息?

以及如何使我的变量成为全球变量,例如

SELECT '$(COMPUTERNAME)'

我认为你做不到。 SQLCMD 变量是一种客户端工具技巧,它们并不真正作为 SQL 服务器概念存在。

连接和服务器不知道它们的存在,并且系统不会在您提交新批次时保留先前批次中使用的变量的知识。

来自sqlcmd - Use with Scripting Variables

If more than one type of variable has the same name, the variable with the highest precedence is used.

  1. System level environmental variables

  2. User level environmental variables

  3. Command shell (SET X=Y) set at command prompt before starting sqlcmd

  4. sqlcmd-v X=Y

  5. :Setvar X Y

其中,前三个实际上是从启动特定进程时获取的,除非该进程具有允许编辑环境变量的特定工具。 SSMS 和 SQLCMD 都没有这样的功能,因此一旦工具已经 运行.

,您就无法在这些类别中创建变量

第四个是 SQLCMD 特定的,在 SSMS 中没有等效项。只剩下最后一个(使用 :setvar),这不会创建“全局”变量(实际上只是环境变量和 SQLCMD 内置变量)。