字段

时间:2016-08-26 14:18:29

标签: sql-server-2008 csv ssis

问题:

我正在尝试将CS​​V文件加载到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行和第1行之间的{CR} {LF}。 2,列在预览中没有排成一行(第2列和第3列一起运行),运行时出错。或者,我尝试使用Ragged Right文件源,将所有数据读入一个4000长度的字符串列,然后使用FINDSTRING和SUBSTRING进行解析并计算分隔符,但这是我遇到包含的逗号问题的地方。

如果我使用平面文件,它似乎无法正确识别{CR} {LF}终结器。如果我使用Ragged Right,由于附带的逗号,我似乎无法正确计算分隔符。这是一个Catch-22!

任何见解???

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的平面文件看起来像这样:

"This Is Record 1, line 1, 34 other fields...
This Is Record 1, line 2, 22 other fields...
This Is Record 1, line 3, 37 other fields..."
"This Is Record 2, line 1, 34 other fields...
This Is Record 2, line 2, 22 other fields...
This Is Record 2, line 3, 37 other fields..."

然后,您将无法使用平面文件源处理此问题。您将需要使用脚本转换源并编写自定义代码来解析文件的每一行并将其发送到适当的目标表。