sql-server – 如何拆分平面文件数据并加载到数据库中的父子表?
我有需要导入父子表的非规范化数据(来自文件).源数据是这样的:
Account# Name Membership Email 101 J Burns Gold alpha@foo.com 101 J Burns Gold bravo@foo.com 101 J Burns Gold charlie@yay.com 227 H Gordon Silver red@color.com 350 B Clyde Silver italian@food.com 350 B Clyde Silver mexican@food.com 我应该使用SSIS的哪些部分,部分或策略将前三列读入父表,将第4列(电子邮件)读入子表?我有多个父键选项,我可以选择: >直接使用帐号#作为主键 我确信我已经列出了我的主键选项,增加了难度.我有兴趣知道如何做第一个和最后一个选项 – 我将推断如何实现中间选项.再次强调,我对一个明确的SSIS解决方案感兴趣;我正在寻找一个使用SSIS语言的答案,而不是一个程序性的,技术中立的答案. 我的问题有点类似于another SO question,有一个模糊可行性的答案.我希望能给出更详细的指导.我已经知道如何通过创建一个“临时”中间步骤来解决这个问题,其中父子分离实际上是用直接SQL处理的.但是,我很好奇如果没有这种中间步骤可以做到这一点. 在我看来,这种重要性是如此常见,以至于会有一种公开的公式化方法来处理它 – 这是SSIS擅长的一种技术.到目前为止,我还没有看到任何直接答案. 更新#1:根据评论,我调整了样本数据以更明显地非规范化.我还从“平面文件”中删除了“flat”,因此语义不会干扰问题. 更新#2:我已经放大了对SSIS语言解决方案的兴趣. 解决方法以下是加载父子数据时可以考虑的一种可能选项.此选项包含两个步骤.在第一步中,读取源文件并将数据写入父表.在第二步中,再次读取源文件并使用查找转换来获取父信息,以便将数据写入子表.以下示例使用问题中提供的数据.此示例是使用SSIS 2008 R2和SQL Server 2008数据库创建的.循序渐进的过程: >创建一个名为Source.txt的示例平面文件,如屏幕截图#1所示. 希望有所帮助. SQL脚本: CREATE TABLE [dbo].[Child]( [ChildId] [int] IDENTITY(1,1) NOT NULL,[ParentId] [int] NULL,[Email] [varchar](21) NULL,CONSTRAINT [PK_Child] PRIMARY KEY CLUSTERED ([ChildId] ASC)) ON [PRIMARY] GO CREATE TABLE [dbo].[Parent]( [ParentId] [int] IDENTITY(1,[Account] [varchar](12) NULL,[Name] [varchar](12) NULL,[Membership] [varchar](14) NULL,CONSTRAINT [PK_Parent] PRIMARY KEY CLUSTERED ([ParentId] 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: 屏幕截图#24: 屏幕截图#25: 截图#26: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |