Sql 出现致命的脚本错误。未定义变量

Sql 出现致命的脚本错误。未定义变量,sql,sql-server,ssms,sqlcmd,Sql,Sql Server,Ssms,Sqlcmd,当我在SSMS 2017和SQL Server DB中以SQLCMD模式运行此查询时。它很好用 --SQLCMD mode --DECLARE Global variables :SETVAR daysBack -1 SELECT $(daysBack) 结果:-1 如果我只跑一行 SELECT $(daysBack) 在同一连接的同一窗口中,或在另一选项卡中。我犯了一个错误 发生了致命的脚本错误。 未定义变量daysBack 为什么我会出错 我如何使我的varibale全球化,例如 SE

当我在SSMS 2017和SQL Server DB中以SQLCMD模式运行此查询时。它很好用

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

如果我只跑一行

SELECT $(daysBack)
在同一连接的同一窗口中,或在另一选项卡中。我犯了一个错误

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

为什么我会出错

我如何使我的varibale全球化,例如

SELECT '$(COMPUTERNAME)'

我想你做不到。SQLCMD变量是一种客户端工具技巧,它们实际上并不是作为SQL Server概念存在的

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

发件人:

如果多个类型的变量具有相同的名称,则使用优先级最高的变量

  • 系统级环境变量

  • 用户级环境变量

  • 在启动sqlcmd之前在命令提示符下设置命令shell(SET X=Y)

  • sqlcmd-vx=Y

  • :Setvar X Y

  • 其中,前三个有效地取自特定流程启动时,除非该流程有特定工具允许编辑环境变量。SSMS和SQLCMD都没有这样的功能,因此一旦工具已经运行,就不能在这些类别中创建变量

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

    $(COMPUTERNAME)用于所有查询。@justromagod-
    $(COMPUTERNAME)
    正在访问
    COMPUTERNAME
    环境变量。环境变量需要在启动客户机工具之前设置,并在其执行期间固定。在SSMS窗口内无法更改或创建新的环境变量。