当我在SSMS 2017和SQL Server DB中以SQLCMD模式运行此查询时。它工作正常。
--SQLCMD mode
--DECLARE Global variables
:SETVAR daysBack -1
SELECT $(daysBack)
结果:-1
如果我只跑一行
SELECT $(daysBack)
在相同连接的同一窗口中,或在另一个选项卡中。我收到错误
发生了致命的脚本错误。 变量daysBack未定义。
为什么我收到错误?
如何使我的varibale Global,例如
SELECT '$(COMPUTERNAME)'
答案 0 :(得分:1)
我认为你不能。 SQLCMD变量是一个客户端工具技巧,它们并不真正作为SQL Server概念存在。
连接和服务器不知道它们是否存在,并且当您提交新批次时,系统不会保留先前批次中使用的变量的知识。
来自sqlcmd - Use with Scripting Variables:
如果多个类型的变量具有相同的名称,则使用具有最高优先级的变量。
系统级环境变量
用户级环境变量
在启动sqlcmd之前在命令提示符下设置命令shell(SET X = Y)
sqlcmd -v X = Y
- 醇>
:Setvar X Y
其中,前三个是从特定流程启动时有效获取的,除非该流程具有允许编辑环境变量的特定工具。 SSMS和SQLCMD都没有这样的功能,因此一旦工具运行,您就无法在这些类别中创建变量。
第四个是SQLCMD特定的,在SSMS中没有等效物。只剩下最后一个(使用:setvar
),这不会创建一个“全局”变量(实际上只是环境变量和SQLCMD内置变量)。