使用查询输出执行 SSIS BCP



我正在尝试在SSIS中执行BCP,以将查询结果导出到几个不同表的CSV文件中。但是,由于某种原因,当我尝试将以下内容放入 bcp exec 的参数中时,我不断收到解析错误:

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

当我使用这些参数执行 BCP 时(将变量更改为现有表名),一切正常。我试图删除参数的几个部分,但仍然收到以下错误

Attempt to parse the expression ""SELECT * from myDB.dbo.@[User::Table] " queryout C:usersMSSQLSERVERDownloads@[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.

我的论点有什么问题?

您的表达式不正确。

"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 参考

最新更新