发生致命的脚本错误。变量未定义
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.
System level environmental variables
User level environmental variables
Command shell (SET X=Y) set at command prompt before starting sqlcmd
sqlcmd-v X=Y
:Setvar X Y
其中,前三个实际上是从启动特定进程时获取的,除非该进程具有允许编辑环境变量的特定工具。 SSMS 和 SQLCMD 都没有这样的功能,因此一旦工具已经 运行.
,您就无法在这些类别中创建变量
第四个是 SQLCMD 特定的,在 SSMS 中没有等效项。只剩下最后一个(使用 :setvar
),这不会创建“全局”变量(实际上只是环境变量和 SQLCMD 内置变量)。
当我 运行 在 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.
System level environmental variables
User level environmental variables
Command shell (SET X=Y) set at command prompt before starting sqlcmd
sqlcmd-v X=Y
:Setvar X Y
其中,前三个实际上是从启动特定进程时获取的,除非该进程具有允许编辑环境变量的特定工具。 SSMS 和 SQLCMD 都没有这样的功能,因此一旦工具已经 运行.
,您就无法在这些类别中创建变量第四个是 SQLCMD 特定的,在 SSMS 中没有等效项。只剩下最后一个(使用 :setvar
),这不会创建“全局”变量(实际上只是环境变量和 SQLCMD 内置变量)。