使用queryout执行SSIS BCP

时间:2013-10-23 16:23:38

标签: sql-server ssis bcp

我正在尝试在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.

我的论点有什么问题?

1 个答案:

答案 0 :(得分: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"

当我在变量中构建复杂的字符串然后只在任务中的表达式中引用构建的变量而不是尝试在那里构建它时,我发现我最成功。这样我就可以在包中放置一个断点,或者使用我的Variable值来引发一个Information事件。使调试成为一个不那么痛苦的过程。

bcp reference