【发布时间】:2012-05-02 15:39:17
【问题描述】:
我搜索了很多地方,很少使用论坛发帖...所以我相信我在这里遇到了一个罕见的问题。我有一个包含一对多关系的 csv 文件。比如说,前 10 个字段包含一条记录。这继续到一个空白字段,然后在每个附加字段中是另一个分隔符,它是一个包含字段的管道。这实际上是与单个调用相关的事件的日志文件。
例如。
ID;MACHINEID;ANI;;COMMAND|ARGUMENTS|20120112.06:15:32
粗体文本可以重复多次或多次。这是 SQL 连接的多方面。我需要把它恢复到 SQL 中。我在想 SSIS 脚本块。我在其中循环并从一侧添加到带有 ID 的多个表中。使用管道作为分隔符拆分内部字段。我只是想知道是否有人以前见过这个并且有一个我可能不知道的简单解决方案。我想这在 XML 中创建会更好,但事实并非如此。
感谢任何帮助。如果它主要是建设性的,我什至会接受批评。提前非常感谢。
为了展示餐桌妆
CREATE TABLE [dbo].[tblIVRCalls](
[CALLID] [char](50) NOT NULL,
[MACHINEID] [char](50) NOT NULL,
[CHANNEL] [char](50) NOT NULL,
[DNIS] [char](50) NOT NULL,
[ANI] [char](50) NOT NULL,
[STARTTIME] [smalldatetime] NOT NULL,
[TRUNK] [char](50) NOT NULL,
[APPLICATION] [char](50) NULL,
[PLANID] [char](50) NULL,
[DERIVEDID] [char](50) NULL,
[TOTALTIME] [smalldatetime] NOT NULL,
CONSTRAINT [PK_tblIVRCalls] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[IVRCallActions](
[pk] [bigint] IDENTITY(1,1) NOT NULL,
[fkCALLID] [char](50) NOT NULL,
[SequenceNumber] [bigint] NOT NULL,
[Command] [char](50) NOT NULL,
[Arguments] [varchar](max) NOT NULL,
[ExecutionTime] [datetime] NOT NULL,
CONSTRAINT [PK_IVRCallActions] PRIMARY KEY CLUSTERED
【问题讨论】:
-
SSIS 以行方式工作,所以不要指望用 SSIS 解决这个问题。应该用一个简单的C#程序来处理
-
@JotaBE:您将如何在 C# 中以不遍历行的方式实现这一点?
-
你的桌子是什么样子的?对于您给出的示例,预期结果是什么? table1 中的 1 行,table2 中的 N 行?信息将始终分为三个部分,还是该变量也是可变的?
-
link 尝试使用此方法使用 C# 代码并根据记录选择它的输出。我正在考虑为每条记录运行一个用于非重复的 A 输出和一个用于使用在变量中捕获的外键重复的 B 记录。