我有两个用于开发的环境,我希望能够从另一个脚本中运行其他脚本。目前,当我需要在两个环境之间切换时,我必须手动注释掉我不需要的路径:
--:SETVAR scriptPath "D:\Scripts\Mark\Documents\Data Integrations\"
:SETVAR scriptPath "C:\Users\Mark\Documents\Data Integrations\"
:r $(scriptPath)"General Scripts"\"Functions and Setup".sql
这段代码运行正常,但我想要做的是添加一个分支语句来自动选择正确的路径。
:SETVAR ServerName "(CAST(SERVERPROPERTY('MachineName') AS NVARCHAR(100)))"
DECLARE @Path NVARCHAR(MAX)
IF $(ServerName) = 'Computer1'
SELECT @Path = 'C:\Users\Mark\Documents\Data Integrations\'
ELSE
SELECT @Path = 'D:\Scripts\Mark\Documents\Data Integrations\'
:SETVAR scriptPath @Path
:r $(scriptPath)"General Scripts"\"Functions and Setup".sql
但是使用此代码我收到了“发生了致命的脚本错误。 在“:r”命令指定的路径中找不到目录。错误。
我做错了什么?
答案 0 :(得分:2)
您无法直接在SQLCMD命令中分配使用T-SQL变量。实现您想要的唯一方法是通过外部文件。
:Setvar DataPhysicalFile ""
:Out $(TEMP)\Rename-DB.temp
PRINT ':Setvar DataPhysicalFile "' + @DataPhysicalFile + '"';
GO
:Out stdout
:r $(TEMP)\Rename-DB.temp
PRINT "$(DataPhysicalFile)"
GO