我的服务器上有很多工作。所有这些都有一个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 \“”/报告 ë
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
有没有人可以向我解释为什么有些命令,有些没有这些转义字符? 所有工作都能正常工作,没有问题。
答案 0 :(得分:0)
据我所知,当字符串包含空格时,需要转义字符。如果不涉及空间,则不需要转义字符,但它们也没有问题。
说明: 假设值为\ MSDB \ BlaBla。它可以按原样传递,不需要它周围的引号。 如果值为\ MSDB \ Bla Bla,为了传递它需要引号:“\ MSDB \ Bla Bla”
转义字符(\)的含义是,下一个字符将被用作简单字符,无需特殊用途。在/ DTS“......解析器期待下一个”字符结束字符串。 \“向解析器解释”字符不是字符串的结尾,而是字符串中的简单字符。
所以/ DTS“\”\ MSDB \ BlaBla \“”表示DTS =“\ MSDB \ BlaBla” 而/ DTS“\ MSDB \ BlaBla”表示DTS = \ MSDB \ BlaBla
答案 1 :(得分:0)
我想这取决于参数如何传递给作业。
按照你的例子,似乎例如一次“VALUE_THREE”已经过去,另一次只有 VALUE_THREE (没有“”)。
此外,它可能取决于作业/参数/ ...的添加方式 - 无论是以编程方式还是通过插入或其他方式手动添加。
这将解释数据库中的不同字符串。