【发布时间】:2019-12-02 10:43:33
【问题描述】:
我想在 SSIS 的 ExecuteProcessTask 中将 SQL 查询导出到 csv 平面文件。
我看不到带有标题、分隔符并将其限定为文本的导出。 我尝试使用 sqlcmd 和 bcp。
关于信息,我必须使用 SELECT *,因为 FROM 中的视图是一个变量,我必须显示所有列。
使用 sqlcmd :
sqlcmd -S ServerName -d dbName -E -Q "SELECT * FROM vPBI_Tasks WHERE [project Leader] like 'ProjectLeaderName'" -o "exportFile.csv" -W -s";"
提取结果:
Scope;Project type;Activity type;OBS;Customer;Contr...
-----;------------;-------------;---;--------;-----...
ESP;ESP - Amendment;NULL;NULL;GSA;ESP_Amendment#13;...
ESP;ESP - Amendment;NULL;NULL;GSA;ESP_Amendment#13;...
ESP;ESP - Amendment;NULL;NULL;GSA;ESP_Amendment#13;...
我想要:
"Scope";"Project type";"Activity type";"OBS";"Customer";"Contra..."
ESP";"ESP - Amendment";"NULL";"NULL";"GSA";"ESP_Amendment#13";""
ESP";"ESP - Amendment";"NULL";"NULL";"GSA";"ESP_Amendment#13";""
ESP";"ESP - Amendment";"NULL";"NULL";"GSA";"ESP_Amendment#13";""
使用 bcp :
bcp "SELECT * FROM vPBI_Resources WHERE [project Leader] like 'ProjectLeaderName'" queryout "exportFile.csv" -c -t ; -S ServerName -T
结果:
- 我没有标题
- 我没有文本限定符
【问题讨论】:
-
在 bcp 或 sqlcmd 中。我不使用经典的平面文件数据目标,我使用执行流程任务编辑器,因为我无法通过平面文件连接。
-
SQL 查询是正则表达式:"SELECT * FROM" + @[User::SQLView] + "WHERE" + @[User::WhereClause]
-
“因为我无法通过平面文件连接。” 为什么不呢?这将使您在这里追求的东西变得微不足道。
-
我遇到的问题是,如果我创建一个平面文件连接,我必须定义导出列的名称和数量,但这取决于@User::SQLView。我跌倒了,也许吧?
标签: sql sql-server ssis sqlcmd bcp