Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net SSIS-导入可变格式文本文件_.net_Sql Server_Sql Server 2008_Ssis - Fatal编程技术网

.net SSIS-导入可变格式文本文件

.net SSIS-导入可变格式文本文件,.net,sql-server,sql-server-2008,ssis,.net,Sql Server,Sql Server 2008,Ssis,我所说的“可变格式”是指文本文件中的每一行都以表示记录类型的单个字符代码开头,并且每个记录类型都有不同的格式。我相信这是一种相当常见的大型机数据导出方法。更糟糕的是,记录类型实际上是层次结构。使用的代码如下所示: 0ThisIsAFileHeader 2ThisIsABatchHeader 4ThisIsDetailData 4ThisIsDetailData 6ThisIsAMatchingBatchFooter 8ThisIsAMatchingFileFooter 0/8为表头/拖车记录(

我所说的“可变格式”是指文本文件中的每一行都以表示记录类型的单个字符代码开头,并且每个记录类型都有不同的格式。我相信这是一种相当常见的大型机数据导出方法。更糟糕的是,记录类型实际上是层次结构。使用的代码如下所示:

0ThisIsAFileHeader
2ThisIsABatchHeader
4ThisIsDetailData
4ThisIsDetailData
6ThisIsAMatchingBatchFooter
8ThisIsAMatchingFileFooter
0/8为表头/拖车记录(每种格式),2/6为副表头/副拖车记录(每种格式),4为实际数据或详细记录


SQL Server 2008,Visual Studio.NET 2008。自定义脚本任务是导入此数据的唯一方法吗?有鉴于此,有人能给我指出一个讨论这样做的资源吗?导入固定宽度的文本文件非常简单,但我不确定脚本任务将在控制流中的什么位置,以及后续步骤将如何利用数据。

这可以在SSIS中完成,尽管您必须跳过一些障碍。在我脑海中,这是一种方法:

  • 源文件应设置为两列,第一个字符和一个剩余字符串
  • 基于第一个字符的条件拆分操作将行拆分为单独的工作流
  • 数据转换操作要获取第二列并将其拆分为适当的字段,必须分别对每种类型的行执行此操作,并将其附加到适当的条件拆分行
  • 应该为每个条件分支配置目的地,以适当地存储/处理数据
如果需要进一步的ETL工作来开始将项目链接在一起,我会将文件导入临时表或永久暂存区域,并在提交最终结果之前执行更多转换

真正的麻烦在于数据是相关的,以及你如何保持这种关系/事后推断它。我想如果我必须把它放在一起,我会在数据流中使用一个脚本组件,它在每次看到头记录时都会增加一个计数器,并输出到流中。这样,每条记录都会有一个识别号,可以用来在事后将它们联系起来


这有点复杂,但问题是可以解决的。

这可以在SSIS中完成,尽管您需要跳过一些障碍。在我脑海中,这是一种方法:

  • 源文件应设置为两列,第一个字符和一个剩余字符串
  • 基于第一个字符的条件拆分操作将行拆分为单独的工作流
  • 数据转换操作要获取第二列并将其拆分为适当的字段,必须分别对每种类型的行执行此操作,并将其附加到适当的条件拆分行
  • 应该为每个条件分支配置目的地,以适当地存储/处理数据
如果需要进一步的ETL工作来开始将项目链接在一起,我会将文件导入临时表或永久暂存区域,并在提交最终结果之前执行更多转换

真正的麻烦在于数据是相关的,以及你如何保持这种关系/事后推断它。我想如果我必须把它放在一起,我会在数据流中使用一个脚本组件,它在每次看到头记录时都会增加一个计数器,并输出到流中。这样,每条记录都会有一个识别号,可以用来在事后将它们联系起来


这有点复杂,但问题是可以解决的。

也许SSIS有更好的方法来解决这个问题,但几年前我在DTS中不得不完成这项任务时,我就是这么做的

首先,我将数据放入有两列(或者三列,如果我觉得需要一个自动生成的id)的临时表中。一列用于表示记录类型的字符,另一列包含该行的所有其余数据

然后,我根据数据分离出规范化的表,并在此过程中进行任何清理


然后我导入到我的生产表中。

也许SSIS有更好的方法来实现这一点,但几年前我不得不在DTS中完成这项任务时,我就是这么做的

首先,我将数据放入有两列(或者三列,如果我觉得需要一个自动生成的id)的临时表中。一列用于表示记录类型的字符,另一列包含该行的所有其余数据

然后,我根据数据分离出规范化的表,并在此过程中进行任何清理


然后我导入到我的生产表。

如果我是你,并且这6个不同的字符代码是唯一与特定数据集关联的代码,那么我将使用平面文件导入组件导入它,然后在每个代码上使用Case组件进行切换。我假设您希望维护层次结构,这样您就可以将数据与案例分开,然后按照您的意愿插入


使用脚本组件导入数据通常是我最后的选择,但我确实喜欢在实际平面文件导入之前使用脚本代码格式化数据,因为文件(如您的情况)导入不正确。我相信编写一个格式化应用程序并使用它格式化来自系统的任何文件比每次编写自定义脚本导入更有用。

如果我是你,并且这6个不同的字符代码是唯一与特定数据集相关联的,那么我将使用平面文件导入组件和然后在每个代码上使用外壳组件进行切换。我假设您希望维护层次结构,这样您就可以将数据与案例分开,然后按照您的意愿插入

使用脚本组件导入数据通常是我最后的选择,但我确实喜欢在实际的平面文件导入之前使用脚本代码格式化数据(如