使用SQL Server Management Studio中的setvar转义空格字符

Tom*_*Tom 4 sqlcmd sql-server-2008

首先,我不是DBA,我没有任何(管理员)SQL Server经验,所以请在回答时使用几个音节很少的单词...

我正在运行SQL Server 2008 R2并尝试编写一个概念验证脚本,该脚本设置非分区,双向,事务复制.我已经设法从MS站点调整脚本工作,现在我正在尝试根据我们的需求进行自定义.这涉及将一堆值拉出到变量中.

我已经将SSMS设置为"SQLCMD模式",并且我的所有变量都可以解析,除了一个.

:setvar ReplicationDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata';
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

发生了致命的脚本错误.解析时遇到错误的语法:setvar

我已将问题缩小到变量值中存在空格.根据我一直在阅读的内容,这应该没有问题.我试过用双打替换单引号(正常种类和角度类型)但都给了我同样的错误.

我在网上找不到任何告诉我如何逃避空间角色的东西.我见过的所有文章都说如果字符串在引号中,SSMS只会将它们之间的任何内容解释为单个字符串 - 无论空格如何.

有没有人有任何想法?

我想我可以将变量的值更改为:

:setvar ReplicationDirectory 'C:\Progra~1\Micros~1\MSSQL10_50.SQL2\MSSQL\repldata';
Run Code Online (Sandbox Code Playgroud)

但我宁愿解决"为什么我不能使用空格?" 而不是问题.

非常感谢.

汤姆

Ed *_*per 11

使用双引号,而不是单引号:

:setvar ReplicationDirectory "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata"

select '$(ReplicationDirectory)' as test
Run Code Online (Sandbox Code Playgroud)

要么

:setvar ReplicationDirectory "'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata'"

select $(ReplicationDirectory) as test
Run Code Online (Sandbox Code Playgroud)

SQLCMD模式变量实际上是命令行变量,而不是T-SQL变量(以@符号开头),您必须相应地设置它们.