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

时间:2018-04-17 07:33:06

标签: 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 Global,例如

SELECT '$(COMPUTERNAME)'

1 个答案:

答案 0 :(得分:1)

我认为你不能。 SQLCMD变量是一个客户端工具技巧,它们并不真正作为SQL Server概念存在。

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

来自sqlcmd - Use with Scripting Variables

  

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

     
      
  1. 系统级环境变量

  2.   
  3. 用户级环境变量

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

  6.   
  7. sqlcmd -v X = Y

  8.   
  9. :Setvar X Y

  10.   

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

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