所谓“可变格式”,是指文本文件中的每一行都以表示记录类型的单个字符代码开头,并且每种记录类型都有不同的格式。我相信这是某种相当常见的大型机数据导出方法。更糟糕的是,记录类型实际上是层次结构。使用中的代码对应关系如下:
0ThisIsAFileHeader
2ThisIsABatchHeader
4ThisIsDetailData
4ThisIsDetailData
6ThisIsAMatchingBatchFooter
8ThisIsAMatchingFileFooter0/8是报头/报尾记录(每个都有自己的格式),2/6是子报头/子报尾记录(也是每个子报头/子报尾记录的格式),4表示实际数据或详细记录。
SQL Server2008、Visual Studio.NET 2008。自定义脚本任务是导入此数据的唯一方法吗?考虑到这一点,有人能给我推荐一个讨论这样做的资源吗?导入固定宽度的文本文件非常简单,但我不确定脚本任务将落在控制流中的什么位置,以及后续步骤将如何利用数据。
发布于 2009-10-16 13:15:06
这可以在SSIS中完成,尽管您必须跳过几个障碍。不经意间,这是一种方法:
基于第一个字符的rest.
如果需要进一步的ETL工作来开始将项目链接在一起,我会将文件导入到临时表或永久临时区域中,并在提交最终结果之前执行更多转换。
真正的麻烦是数据是相关的,以及你如何保持这种关系/在事后推断它。我想如果我必须把它组合在一起,我会在数据流中使用一个脚本组件,它在每次看到标题记录时增加一个计数器,并将其输出到流中。这样,每条记录都会有一个标识号,以后可以用来将它们联系起来。
这有点复杂,但这个问题是可以解决的。
发布于 2009-10-16 13:15:17
也许SSIS有一种更好的方法来做这件事,但是几年前我不得不在DTS中做这件事时,我就是这么做的。
首先,我将数据放入有两列的临时表中(如果我觉得需要一个自动生成的id,则有三列)。一列是表示记录类型的字符,另一列是该行的所有剩余数据。
然后,我根据数据分离到规格化表,并在此过程中进行任何清理。
然后我导入到我的生产表中。
发布于 2009-10-16 13:17:32
如果我是您,并且这6个不同的字符代码是唯一与特定数据集关联的字符代码,那么我将使用平面文件导入组件导入它,然后使用每个代码上的大小写组件进行切换。我假设你喜欢维护层次结构,这样你就可以用Case拆分数据,然后随心所欲地插入它。
使用脚本组件导入数据通常是我最后的手段,但当文件(如您的例子)无法正确导入时,我确实喜欢在实际的平面文件导入之前使用脚本代码格式化数据。我认为编写一个格式化应用程序并使用它来格式化来自系统的任何文件比每次都编写自定义脚本导入更有用。
https://stackoverflow.com/questions/1577899
复制相似问题