【问题标题】:Automatically Escape Quotes in SSIS Export在 SSIS 导出中自动转义引号
【发布时间】: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


【解决方案1】:

编辑 TextQualified 属性

尝试一下,在平面文件连接管理器中,将文本限定符设置为",然后转到高级选项卡,然后将第一列和最后一列的TextQualified 属性更改为FalseRead more

如果这不起作用,我认为没有直接的方法可以实现这一点,无需派生列或其他转换。因此,您可以做的最佳解决方法是将目标平面文件中的列分隔符更改为制表符(或不同于逗号 , 的任何内容)

【讨论】:

  • 不幸的是,我不能真正使用任何其他类型的分隔符,因为我正在处理的数据在某个字段中几乎包含所有可能的字符,包括制表符。
  • @MikeDeluca 您是否尝试过我的第一个建议,将IDStatus 列的TextQualified 属性更改为False,并将True 保留为Name
  • 是的,这没有任何影响。
  • @Yahfoufi 文本限定符在整个字段周围加上引号,它不会在字段内转义引号。所以结果可能最终是"Awesome "Store"",但这是不正确的,因为它需要是"Awesome ""Store"""
  • @MikeDeluca 我认为没有派生列或脚本组件就无法实现这一目标。这是您可以在不进行转换的情况下做到的最好的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2019-10-03
  • 2019-09-18
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多