如何使用SSIS加载在EDI 823密码箱文件中找到的父子数据?

如何解决如何使用SSIS加载在EDI 823密码箱文件中找到的父子数据?

| 我必须使用ssis将EDI 823锁盒文件加载到SQl服务器数据库中。谁能告诉我如何处理不同线条之间的父子关系。     

解决方法

更新:以下答案仅显示了将简单的父子数据加载到SQL Server中的示例。 检查此链接以查看如何使用SSIS加载实际的“ 0”文件。 这是一个可能的选项,可用于加载父子/标题详细信息。 在这种情况下,我有一个平面文件,其中包含与国家和州有关的标头详细信息。以“ 1”开头的行表示标题行,以“ 2”开头的行表示明细。有关示例文件内容,请参阅屏幕截图1。 分步过程: 在数据库中(我选择了SQL Server),创建两个名为
dbo.Header
dbo.Detail
的表。有关这些表的创建脚本,请参见第5节。在此示例SSIS包的帮助下,我们将通过读取平面文件内容来填充这些表。 在SSIS包上,拖放两个数据流任务。将它们分别命名为
Header
Detail
。请参阅屏幕快照2,以了解如何放置它们。 创建一个名为string8 data的数据类型字符串的变量。将值“ 1”分配给变量。请参阅屏幕截图3。 配置Header数据流任务,如屏幕截图4所示。下面的步骤5-11描述了Header数据流任务中的每个转换任务。
Read File
是平面文件源,它被配置为读取屏幕快照#1中所示的文件。屏幕快照#5-#9中显示了此任务中使用的平面文件连接的配置设置。
Data clean up
是派生的列转换任务,用于删除输入中存在的任何空格。请参阅屏幕截图10。
Segregate data
是脚本组件转换任务。拖放脚本组件时,选择“转换”选项。请参阅截图11,以了解如何在此任务上配置ѭ13。请参阅屏幕截图12,以了解如何在此任务上配置ѭ14。输出列“ 15”的数据类型为DT_BOOL,输出列HeaderKey为数据类型的DT_STR,长度为50。在左侧选择“ 16”,然后单击“ 17”。将脚本组件中的代码替换为脚本任务组件部分中使用的代码下给出的代码。 顾名思义,“ 18”是组播转换任务。它没有任何特殊配置。
Fetch Detail
是条件分割变换任务。请参阅屏幕快照#13来配置此任务。 “ 6”是配置为连接到新创建的表dbo.Header的OLE DB目标。屏幕快照#14中显示了此任务的字段映射。
Staging
是配置为写入CSV文件的平面文件目标。屏幕截图#15-#16中显示了此连接管理器的配置。登台连接管理器中有四列。
Code
Value
列的数据类型为DT_STR,长度为255;
IsHeader
的数据类型为DT_BOOL;
HeaderKey
的数据类型字符串的长度为50。
Staging
任务的字段映射如屏幕快照17所示。 然后,我们继续下一个数据流任务task7。 配置细节数据流任务,如屏幕截图18所示。下面的步骤14-16描述了Detail数据流任务中的每个转换任务。
Staging
是平面文件源,配置为使用在步骤#11中创建的
Staging
连接管理器。 “ 30”是配置为指向表dbo.Header的查找转换。屏幕快照#19中显示了此任务的列配置。 “ 7”是配置为连接到新创建的表dbo.Detail的OLE DB目标。屏幕快照#20中显示了此任务的字段映射。 屏幕截图#21和#22显示了数据流任务Header和Detail的执行。 屏幕截图#23显示了加载到表中的数据。 希望能有所帮助。 脚本任务组件中使用的代码(在上面的步骤#7中提及): 只能在
SSIS 2008 and above
中使用的C#代码。 。
/*Microsoft SQL Server Integration Services Script Component
*  Write scripts using Microsoft Visual C# 2008.
*  ScriptMain is the entry point class of the script.*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    string currentValue = string.Empty;
    string previousHeader = string.Empty;

    public override void PreExecute()
    {
        base.PreExecute();
    }

    public override void PostExecute()
    {
        base.PostExecute();
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        IDTSVariables100 varCollection = null;
        this.VariableDispenser.LockForRead(\"User::HeaderCode\");
        this.VariableDispenser.GetVariables(out varCollection);

        currentValue = Row.ValueTrimmed.ToString();

        if (Row.CodeTrimmed.ToString() == varCollection[\"User::HeaderCode\"].Value.ToString())
        {
            Row.IsHeader = true;

            if (previousHeader != currentValue)
            {
                previousHeader = currentValue;
            }
        }

        Row.HeaderKey = previousHeader;

        varCollection.Unlock();
    }

}
表格: 。
CREATE TABLE [dbo].[Detail](
    [DetailId] [int] IDENTITY(1,1) NOT NULL,[Name] [varchar](255) NOT NULL,[HeaderId] [int] NOT NULL,CONSTRAINT [PK_Detail] PRIMARY KEY CLUSTERED 
(
    [DetailId] ASC
)) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Header](
    [HeaderId] [int] IDENTITY(1,CONSTRAINT [PK_Header] PRIMARY KEY CLUSTERED 
(
    [HeaderId] ASC
)) ON [PRIMARY]
GO
屏幕截图1: 屏幕截图2: 屏幕截图3: 屏幕截图4: 屏幕截图5: 屏幕截图6: 屏幕截图7: 截图8: 屏幕截图9: 屏幕截图#10: 屏幕截图#11: 屏幕截图#12: 截图13: 屏幕截图#14: 屏幕截图15: 屏幕截图#16: 截图17: 截图18: 屏幕截图#19: 屏幕截图#20: 屏幕截图#21: 屏幕截图22: 屏幕截图#23:     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-