2

我在将数据从文本文件导入 SQL 时遇到问题。不是因为我不知道如何……而是因为为此目的格式化非常糟糕。以下是我需要使用的文本文件类型的更改示例:


1   VA -    P
2   VB to 1X    P
3   VC to 1Y    P
4   N - P
5   G to 1G,Frame   P
6   Fout to 1G,Frame    P
7   Open Breaker    P
8   1B to 1X    P
9   1C to 1Y    P

Test Status: Pass
Hi-Pot @ 1500V: Pass 
Customer Order:904177-F
Number: G4901626-200
Serial Number: J245F6-2D03856
Catalog #: CBDC37-X5LE30-H40-L630C-4GJ-G31
Operator: TGY
Date:  Aug 01, 2013
Start Time: 04:09:26
Finish Time: 04:09:33

前 9 行都是具体的测试结果(制表符分隔),下面有标题信息。我的问题是我需要弄清楚:

  1. 如何获取上面的数据并将其转换为标准列格式以导入 SQL?

  2. 然后我怎样才能自动化这个,以便我可以遍历整个文件夹结构?-您在上面看到的是数百个文件之一,这些文件分为几个子目录。

另请注意,标题信息上方的测试行数因文件而异。不过,标题信息的格式基本相同。这是所有无法重新生成的遗留数据,但需要导入到我们的 SQL 数据库中。

我正在考虑使用带有自定义脚本的 SSIS 项目来导入数据...通过查找第一个空行从底部拼接顶部...然后将标题中的数据旋转为列格式...合并……然后继续。但我写的VB不多,我不知道如何处理。

我在可以访问 BIDS 的 SQL Server 2008R2 环境中工作。

想法?

4

4 回答 4

2

我首先将数据作为所有字符导入到具有单个字段的表中,每行一条记录。然后,从该表中,您可以将每条记录解析为适合每行的字段和字段类型。希望有一种方法可以弄清楚每行是什么类型的数据,每个文件的顺序是否一致,或者标题记录指示有关后续行的信息。从那里,数据可以移动到最终的(解析可能需要不止一次)表中,数据以可用于任何您需要的格式存储。

于 2013-11-04T21:15:06.710 回答
2

我将首先专注于以尽可能最简单(且最不容易出错)的方式将数据输入数据库。创建一个包含三列的表filenameline_numberline_data。将所有文件放入该表中,然后您可以开始考虑如何解释数据。我可能希望使用PIVOT,但如果不同的文件可以有不同数量的字段,则可能会引入复杂性。

于 2013-11-04T21:21:51.370 回答
1

我会使用不同的方法并使用 SSDT/SSIS 包来导入数据。

  1. 添加一个脚本组件以读取文本文件并将其转换为 XML。不难,网上有很多例子。在您的脚本中将您开发的 XML 存储到一个变量中。
  2. 添加数据流
  3. 添加 XML 源。在 XML 源中,您可以选择您创建的 XML 变量并处理文件中存在的任一组数据。以下是有关使用 XML Source的一些信息。
  4. 添加目标任务以将其导入您选择的目标
于 2013-11-05T01:35:22.130 回答
0

此解决方案假定您的输入行以正常的 Windows 方式终止 {CR}{LF}。
告诉 MSSQL 的导入/导出向导导入平面文件;格式为“分隔”;“文本限定符”是 {CR};“标题行分隔符”是 {LF};并且 OutputColumnWidth (在“高级”中)比可能的最长行长多一点。
这很简单,而且很有效。

我只是用这个导入了2300万行混杂的数据,用了不到十分钟。现在要编辑它...

于 2013-11-18T12:33:16.573 回答