2010-07-27 21 views
5

Ich bin versucht, ein SSIS-Paket auf SQL 2005 mit den folgenden auszuführen:SSIS DTEXEC Paket Variable Raumzeichen nicht akzeptiert

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

Dies ergibt:

Option "Batch " is not valid. 

Der Raum am Ende das Wort Batch innerhalb der Anführungszeichen gab mir einen Hinweis, dass es vielleicht den letzten Backslash als Escape-Zeichen behandelt. Also versuchte ich es auf diese Weise:

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

Dies das Paket erlaubt zu laufen, aber wenn diese Variable als Name einen Flatfile zur Ausgabe von Daten verwendet wird, um, gibt es jetzt die folgende Fehlermeldung:

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 

Was gibt?

Antwort

8

In der Fehlermeldung, die die fehlerhafte Datendatei auflistet, gibt der einzelne umgekehrte Schrägstrich nach dem Wort Batch den Hinweis, dass möglicherweise nur der umgekehrte Schrägstrich betroffen ist.

Einige Tests haben ergeben, dass aus irgendeinem seltsamen Grund, wenn das letzte Zeichen einer Paketvariable ein Backslash sein muss, SSIS eine Verdoppelung des Werts erfordert. Dies gilt auch, wenn Sie die GUI verwenden und einen Job vom Typ "SQL Server Integration Services Package" auswählen und auf die Registerkarte "Set values" klicken: ein hinterer Schrägstrich muss verdoppelt werden.

Der letzte Arbeits Befehl war:

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

Mit einem letzten Doppel-Backslash.

+0

Wäre dies ein Microsoft-Bug? –

+0

Ich denke, es ist etwas Standard, Zitate mit einem Backslash zu entziehen. Der seltsame Teil ist, dass das Entfernen des Backslash selbst nur erlaubt ist, wenn es vor einem doppelten Anführungszeichen steht - im Wesentlichen Backslash-Entweichen '' 'oder' '' '' und nichts anderes. Dies kann normales DOS-Batch-Befehlsverhalten sein - aber ich bin mir nicht sicher. – ErikE

+0

Ich schätze Ihre obige Frage und Antwort sehr. Wenn ich Netzwerkpfade wie \\ mein Server \ mein Pfad \ hatte, würde es in \\ mein "Server \ mein" \ Pfad \ teilen, bis ich Ihre Lösung fand. Ich habe erst vor Monaten damit angefangen zu recherchieren, bis ich deinen Post gefunden habe. –