SSIS作业步骤中的转义字符

3
我有很多在我的服务器上运行的作业,它们都包含一个SSIS步骤。最近我注意到在一些作业中,msdb.dbo.sysjobsteps.command 列的模式不同。我的意思是,其中一些具有转义字符,而另一些则没有。例如:
1 - 带转义字符的命令:
/DTS "\"\MSDB\BlaBla\"" /SERVER SomeServer /CHECKPOINTING OFF /SET "\"\package.variables[Variable_One]\"";"\"VALUE_ONE\"" /SET "\"\package.variables[Variable_Two]\"";VALUE_TWO /SET "\"\package.variables[Variable_Three]\"";"\"VALUE_THREE\"" /REPORTING E
2 - 不带转义字符的命令:
/DTS "\MSDB\BlaBla" /SERVER SomeServer /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /SET "\package.variables[Variable_One]";"VALUE_ONE" /SET "\package.variables[Variable_Two]";VALUE_TWO /SET "\package.variables[Variable_Three]";VALUE_THREE /REPORTING E
有人能解释一下为什么有些命令带有转义字符,而有些则没有吗? 所有作业都正常运行,没有问题。

转义只会在其中一个参数中包含空格,例如软件包名称本身时才发生吗?那么它的行为类似于命令提示符中的长路径。 - Cee McSharpface
2个回答

0
据我所知,当字符串包含空格时,需要使用转义字符。如果没有空格,则不需要转义字符,但它们也不会造成问题。
解释: 假设值为\MSDB\BlaBla。它可以直接传递,不需要在其周围加引号。 如果值为\MSDB\Bla Bla,则需要用引号传递:“\MSDB\Bla Bla”
转义字符(\)的含义是下一个字符将被用作简单字符,而不是特殊用途。在/DTS中,“...解析器期望下一个“字符”来结束字符串。“\”向解析器说明“字符”不是字符串的结尾,而是字符串中的一个简单字符。
因此,/DTS“\”\MSDB\BlaBla\”表示DTS=“\MSDB\BlaBla”,而/DTS“\MSDB\BlaBla”表示DTS=\MSDB\BlaBla。

0

我猜这取决于参数是如何传递给作业的。

根据您的示例,似乎有一次传递了"VALUE_THREE",而另一次只传递了VALUE_THREE(没有"")。

此外,这可能取决于作业/参数/...添加的方式 - 无论是通过编程还是手动插入等方式。

这可以解释数据库中不同的字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接