2010-07-27 113 views
5

我试图用下面的SQL执行SSIS包2005:SSIS DTEXEC包变量空格字符不接受

dtexec /SQL "\MyPackageName" /SERVER mssql1 /MAXCONCURRENT " -1 " /CHECKPOINTING OFF 
/SET "\Package.Variables[FileFolder].Value";"\\SomeServer\Someshare\Output Batch\" 

这产生了:

Option "Batch " is not valid. 

在末尾的空间引号内的Batch这个词给了我一个暗示,也许它将最后一个反斜杠当作一个转义字符。所以,我想这样说:

dtexec /SQL "\MyPackageName" /SERVER mssql1 /MAXCONCURRENT " -1 " /CHECKPOINTING OFF 
/SET "\Package.Variables[FileFolder].Value";"\\\\SomeServer\\Someshare\\Output Batch\\" 

这使包运行,但是当这个变量作为平面文件输出数据的名称,它现在提供了以下错误:

Warning: 2010-07-27 14:36:38.23 
    Code: 0x8007007B 
    Source: Data Flow Task Flat File Destination [72] 
    Description: The filename, directory name, or volume label syntax is incorrect. 
End Warning 
Error: 2010-07-27 14:36:38.23 
    Code: 0xC020200E 
    Source: Data Flow Task Flat File Destination [72] 
    Description: Cannot open the datafile "\\\\SomeServer\\Someshare\\Output Batch\FlatFile.txt". 
End Error 

什么给?

回答

8

在列出错误数据文件的错误消息中,单词Batch之后的单个反斜杠提示可能只有该反斜杠受到影响。

一些测试证明,出于某种奇怪的原因,当包变量的最后一个字符需要反斜杠时,SSIS要求它加倍。即使在使用GUI并选择“SQL Server Integration Services包”类型的作业并单击“设置值”选项卡时,这也适用:尾部反斜杠必须加倍。

最后的工作命令是:

dtexec /SQL "\MyPackageName" /SERVER mssql1 /MAXCONCURRENT " -1 " /CHECKPOINTING OFF 
/SET "\Package.Variables[FileFolder].Value";"\\SomeServer\Someshare\Output Batch\\" 

有了最终的双反斜线。

+0

这会被视为Microsoft错误? – 2013-08-18 23:57:50

+0

我认为用反斜杠来引用引号是有点标准的。奇怪的部分是,只有在双引号字符之前才允许转义反斜杠 - 本质上,反斜杠转义为“”或“\”''而没有别的。这可能是正常的DOS批处理命令行为 - 但我不确定。 – ErikE 2013-08-19 07:06:05

+0

我真的很感激你的上述问题和答案。当我有像\\我的服务器\我的路径\这样的网络路径时,它会将其分割为\\我的“”服务器\我的“\ \路径\直到找到您的解决方案。我几个月前开始研究,直到找到你的帖子。 – 2013-08-19 12:26:43