首先,我不是DBA,我没有任何(管理员)SQL Server经验,所以在回答时请使用几个音节的单词...
我正在运行SQL Server 2008 R2并尝试编写一个概念验证脚本,该脚本设置非分区,双向,事务复制。我已经设法从MS网站调整脚本工作,现在我正在尝试根据我们的需求进行自定义。这涉及将一堆值拉出变量。
我已将SSMS设置为“SQLCMD模式”,并且我的所有变量都可以解析,除了一个。
:setvar ReplicationDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata';
这给了我错误:
发生了致命的脚本错误。 解析时遇到错误的语法:setvar
我已将问题缩小到变量值中存在空格。根据我一直在阅读的内容,这应该没有问题。我试过用双打替换单引号(正常种类和角度类型)但都给了我同样的错误。
我在网上找不到任何告诉我应该如何逃避空间角色的东西。我看到的所有文章都说,如果字符串在引号中,SSMS只会将它们之间的任何内容解释为单个字符串 - 无论空格如何。
有没有人有任何想法?
我想我可以将变量的值更改为:
:setvar ReplicationDirectory 'C:\Progra~1\Micros~1\MSSQL10_50.SQL2\MSSQL\repldata';
但我宁愿解决“为什么我不能使用空格?”而不是问题。
非常感谢。
汤姆
答案 0 :(得分:11)
使用双引号,而不是单引号:
:setvar ReplicationDirectory "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata"
select '$(ReplicationDirectory)' as test
OR
:setvar ReplicationDirectory "'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata'"
select $(ReplicationDirectory) as test
SQLCMD模式变量实际上是命令行变量,而不是T-SQL变量(以@
符号开头),您必须相应地设置它们。
答案 1 :(得分:2)
除了单引号字符串中的空格外,尾随分号还会引发问题。
空格和分号上的 :setvar test1 'test test';
错误
:setvar test1 'test test'
错误
:setvar test3 "test test";
错误
:setvar test4 "test test"
使变量中的空格可用作test test
:setvar test4 "'test test'"
将单引号和变量中可用的空格设为'test test'