【发布时间】:2016-08-26 14:18:28
【问题描述】:
问题:
我正在尝试将 CSV 文件加载到我们的 SQL Server 2008 数据库中,但在解析字段时遇到了困难。
我找到了有关使用平面文件源读取文件并使用双引号作为文本限定符的说明,以便将带逗号的字段计为单个字符串值,并且能够成功地做到这一点。
数据:
此文件的每个帐户记录包含三个行项目。所有帐户记录都有第 1、2 和 3 行,1 有 35 列,2 有 22 列,3 有 37 列。这些列不是 1:1 关系,因此例如记录 1 上的第 6 列与记录 2 上的第 6 列的数据(或数据类型)不同。此外,每个行项目都需要进入单独的表,所以我有单独处理它们。
我的第一步是使用派生列转换分隔 1、2 和 3 记录。第二步是将每种记录类型的字段解析为各自的字段,这就是我遇到问题的地方。
最大的问题是第 1 条记录中的一个(有时是两个)字段有时会有逗号,有时没有。所以...有时 SSIS 会将 1 条记录解析为 36 个字段,有时是 35 个,有时是 34 个。
尝试的解决方案:
如果我使用带引号的平面文件源作为文本限定符来导入文件,则预览无法识别第 1 行和第 2 行之间的 {CR}{LF} 并且列不会在预览中正确对齐(第 2 列和第 3 列一起运行)并且在运行时出现错误。或者,我尝试使用 Ragged Right 文件源,将所有数据读取到一个 4000 长度的字符串列中,然后使用 FINDSTRING 和 SUBSTRING 进行解析并计算分隔符,但这是我遇到封闭逗号问题的地方。
如果我使用平面文件,它似乎无法正确识别 {CR}{LF} 终止符。如果我使用 Ragged Right,由于包含逗号,我似乎无法正确计算分隔符。这是第 22 条军规!
有什么见解???
【问题讨论】:
标签: sql-server-2008 csv ssis