将TSQL变量分配给SQLCMD变量

时间:2015-02-20 13:08:18

标签: sql-server-2008 tsql sqlcmd

我有两个用于开发的环境,我希望能够从另一个脚本中运行其他脚本。目前,当我需要在两个环境之间切换时,我必须手动注释掉我不需要的路径:

--: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”命令指定的路径中找不到目录。错误。

我做错了什么?

1 个答案:

答案 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