【发布时间】:2018-06-03 06:42:37
【问题描述】:
我正在使用带有 SSIS 的 SQL Server 2014
我有一个这样的数据集:
ID Name Status
1 Awesome "Store" Active
2 Market, Place Active
3 Vendor Active
在 SSMS 中,当结果在网格中并且我右键单击并选择将结果另存为 CSV 时,原始输出是这样的:
ID,Name,Status
1,"Awesome ""Store""",Active
2,"Market, Place",Active
3,Vendor,Active
我需要使用 SSIS 将数据从数据库导出到 CSV 文件,以便原始输出与上面完全相同。每次我需要为新数据集执行此操作时,我不想执行任何派生列来替换字符串或任何自定义解决方案。
我尝试使用平面文件目标并将文本限定符设置为",但它在每个值周围加上引号(不是什么大问题),但它不会将Awesome "Store" 中的现有引号转义为Awesome ""Store""这是我面临的主要问题。
有没有人有一个解决方案可以实现我正在寻找的东西?谢谢!
【问题讨论】:
-
在每个值周围加上引号正是“文本限定”的意思。您要问的是如何转义字段值内现有的双引号
-
一个快速而肮脏的解决方案是在目标之前添加派生列转换并将
"字符替换为""。 -
@PanagiotisKanavos 是的,但是我特意说了不想做派生列
-
那你可能倒霉了。 CSV 是一种定义松散的“格式”。
Flat File Destination旨在快速导出文本,而不是创建可以涵盖所有约定的 CSV,例如引用文本限定符或允许字段内的字段/行分隔符。您可能必须安装第三方目的地或使用脚本目的地。 -
使用不在源数据中的逗号以外的分隔符,如管道 (|)。
标签: sql-server csv ssis etl