【问题标题】:SQL Server 2016 Import Wizard - Trailing WhitespaceSQL Server 2016 导入向导 - 尾随空格
【发布时间】:2018-10-23 21:20:14
【问题描述】:

我有一个无标题的纯文本文件(我有字段布局),用逗号分隔,也用引号标识。不幸的是,该文件在记录集中的最后一个字段之后立即包含超过 3000 个空格字符。所有记录都是如此。

示例记录:

"Stuff","Things","No","","000000000.00","000000000.00","" 3000 个空格)

我目前只是尝试通过 SSMS 导入文件向导将数据导入 SQL Server 中的磁盘表,以开始分析数据以确保我的最终表具有相应的类型/大小。预览窗格如下所示:

即使我明确忽略了它要申请的字段,最后一个字段和空白,在最后一个字段上导入失败,声称找不到。

我已经请求了一个更干净的文件,但是我想知道将来在等待更干净的文件时该怎么做。

我对 SSIS 解决方案持开放态度,但是 SSMS 导入解决方案也将不胜感激,因为它只是将数据从诸如此类的文件中获取到临时表中以使用数据。

谢谢

【问题讨论】:

  • 为什么不在使用导入向导之前对文件进行预处理以清理它?一个简单的单行sed 命令就可以做到:`s/\s+$\`。
  • 这是一个严格的 unix 命令,还是有 cmd 或 powershell 等价的命令?
  • 它最初是一个 *nix 命令,但也有为 Windows 编译的版本,例如 GnuWin32 项目。
  • 我在此处成功使用了 powershell 脚本:stackoverflow.com/questions/3579157/…。感谢 rd_nielsen 让我到达那里!

标签: sql-server ssis


【解决方案1】:

使用 SSIS,可以通过使用 RTRIM 函数添加派生列来删除尾随空格。当您在数据流中添加派生列时,为您的列选择“替换”选项并将此功能应用于它。如果您需要删除前导空格和尾随空格,TRIM 函数将处理此问题。

RTRIM(YourColumnName)

【讨论】:

  • 你能引导我进入正确的方向吗?我现在在数据流中有平面文件源,它连接到派生列转换。坏列是数组中的最后一列,具体命名为“第 63 列”。我已将第 63 列放入派生列转换并使用替换,并在表达式 RTRIM([cColumn 63]) 下使用 RTRIM。它似乎仍然与:[平面文件源 [273]] 错误:未找到列“列 63”的列分隔符。
  • 您使用逗号作为分隔符,对吗?这是在平面文件连接管理器中指定的吗?另外,文本限定符是否设置为引号?
  • 请参考我在问题中的示例。数据以逗号分隔,文本用引号限定。平面文件源配置正确,因此预览窗格正确显示字段(最后一个字段除外)。文件中的示例数据显示,空格紧跟在最后的字段引号之后(,"000000000.00"," " -now begin white space-)。这就是为什么预览窗格中的最后一个字段看起来像:[" " ---]。我相信,空白会在 SSIS 中造成混乱,并将最后添加的空白视为不完整的字段定义
  • 目标是删除最后一个字段后的空格。目前,使用 rd_nielsen 提出的 powershell 脚本对文件进行预处理似乎是要走的路。但是,对于 SSIS 任务解决方案来说,删除源组件中的空格会很好。但是,我怀疑它的存在。
  • 也许我误解了你的问题。最后一个字段后面的空白被解释为 SSIS 中的附加列?如果是这样,您可以打开平面文件连接管理器并从那里删除最后(无效)列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 2015-03-05
相关资源
最近更新 更多