将未格式化的txt文件导入SQL

时间:2013-11-04 20:59:51

标签: sql sql-server-2008 import ssis

我遇到从文本文件将数据导入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. 如何自动执行此操作,以便循环浏览整个文件夹结构?   - 你在上面看到的是分成几个子目录的数百个文件中的一个。

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

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

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

    思想?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

我首先会集中精力以尽可能最简单(也最不容易出错)的方式将数据导入数据库。创建一个包含三列的表格:filenameline_numberline_data。将所有文件放到该表中,然后您就可以开始考虑如何解释数据了。我可能希望使用PIVOT,但如果不同的文件可以包含不同数量的字段,则可能会引入并发症。

答案 2 :(得分:1)

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

  1. 添加脚本组件以读入文本文件并将其转换为XML。很多examples on the web并不难。在您的脚本中将您开发的XML存储到变量中。
  2. 添加数据流
  3. 添加XML源。在XML源代码中,您可以选择您创建的XML变量并处理文件中存在的任一组数据。以下是using the XML Source
  4. 的一些信息
  5. 添加目标任务以将其导入您选择的目的地

答案 3 :(得分:0)

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

我只是用它来导入2300万行混合数据,花了不到十分钟。现在编辑它......