0

SSIS 内で BCP を実行して、クエリの結果をいくつかの異なるテーブルの CSV ファイルにエクスポートしようとしています。ただし、何らかの理由で、bcp exec の引数に次のものを入れようとすると、解析エラーが発生し続けます。

"SELECT * from myDB.dbo.@[User::Table] " queryout C:\users\MSSQLSERVER\Downloads\@[User::Table].csv -c -t, -T

これらの引数 (変数を既存のテーブル名に変更) を使用して BCP を実行すると、すべて正常に動作します。引数のいくつかの部分を削除しようとしましたが、まだ次のエラーが発生します

Attempt to parse the expression ""SELECT * from myDB.dbo.@[User::Table] " queryout C:\users\MSSQLSERVER\Downloads\@[User::Table].csv -c -t, -T" failed. The expression might contain an invalid token, an incomplete token, or an invalid element. It might not be well-formed, or might be missing part of a required element such as a parenthesis.

私の主張の問題点は何ですか?

4

1 に答える 1

1

あなたの表現は正しくありません。

"SELECT * from myDB.dbo.@[User::Table]" queryout C:\users\MSSQLSERVER\Downloads\@[User::Table].csv -c -t, -T

SSIS 式言語は、文字列内の変数を参照する PowerShell とは異なります。代わりに、文字列連結で石器時代に戻ります。スラッシュと二重引用符のエスケープも処理できるため、最終的な式は次のようになります。

"""SELECT * from myDB.dbo." 
+ @[User::Table] 
+ """ queryout C:\\users\\MSSQLSERVER\\Downloads\\" 
+ @[User::Table] 
+ ".csv -c -t, -T"

変数で複雑な文字列を作成し、そこにビルドしようとするのではなく、タスクの式でビルドされた変数のみを参照すると、最も成功することがわかりました。そうすれば、パッケージにブレークポイントを設定したり、変数の値で情報イベントを発生させたりすることができます。手間のかかるプロセスのデバッグの苦痛を大幅に軽減します。

bcp リファレンス

于 2013-10-25T02:26:53.950 に答える