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 回答