【问题标题】:Dynamic text qualifier动态文本限定符
【发布时间】:2015-11-05 00:19:17
【问题描述】:

我正在从 SQL Server 2008 导出到 .csv,以便人们可以在 Excel 中轻松使用它。我正在使用 SSIS 2008。否则我只会导出到 Excel。它大约有 50 列,500K 行,所以 25M 记录。问题是其中大约 40 条记录的数据中有 ,,(记录不是列)我添加了文本限定符以避免我的列被弄乱,但这增加了 50M " 标记或大约 30 MB(20% ) 到我的输出文件。我知道我可以在 SQL Server 2008 中进行某种类型的替换,但我觉得这会大大减慢速度。

有没有办法只为带有, 的项目添加文本限定符?

尽管考虑到它仍然需要检查每条记录,所以看来我要么放慢我的过程,要么用 185MB 的 Excel 文件搞砸最终用户。

更多信息:数据源是一个存储过程,大约需要四分钟来运行所有使用的列 (SQL Server 2008)。目标是平面文件,用 " 文本限定符分隔逗号 (SSIS 2008)。

【问题讨论】:

  • 如果记录仅在某些列中,您可以在连接管理器的“高级”页面中单独关闭每列的文本限定符。遗憾的是,我认为没有办法仅在需要它的记录上指定限定符。也许正如 pnuts 所说,制表符分隔的格式是要走的路。如果任何字段有选项卡,您可以在通过的过程中用空格替换它们。 (我认为,30MB 在宏伟的计划中真的很重要吗?一旦用户将其导入 Excel 并将其保存为 Excel 文件,它就会变得更小,我认为,现在 30MB 似乎并不多。 ..)
  • @MattGibson 我同意,30 MB 看起来并不多,但我正在从“旧”方法转换过来,所以当他们看到文件大小从 140MB 跳到 170MB 并打开“慢一点”他们会质疑我。我将采用在有问题的列上简单地添加文本限定符的方法。谢谢大家!

标签: excel sql-server-2008 ssis


【解决方案1】:

结束这个问题。如果不向 SSIS 包添加脚本步骤或检查 , 的每个字段并用双 " 封装任何字段,我们无法确定动态添加文本限定符的方法。从逻辑上讲,这是我所排除的,但我不确定 SSIS 是否有我不知道的功能。

我的最终解决方案是将任何可能有逗号的列设置为使用文本限定符。它使我的文件大小增加了 5-10%,但这是可以接受的。

【讨论】:

    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 2016-10-28
    • 2019-07-08
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2016-11-13
    相关资源
    最近更新 更多