0

我正在尝试获取一个平面文件并将其转换为 SSIS 中的两个表并加载到 OLEDB 源 (SSMS)。我已经在 SSMS 中创建了与行由 , 分隔的平面文件匹配的表。我必须进行数据转换转换,因为平面文件数据类型与我在 SSMS 的表中设置的 nvarchar 数据类型不同。我当前的包遇到了一些障碍,并且在加载到目标之前无法将数据加载到 OLEDB 中而不抛出一些错误。

我在 SSMS 中设置的两个表。一个有一个主键(Unique_ID),并且该主键在另一个表中引用相同的外键(Unique_ID)

现在在我的控制流上

执行 SQL 任务以在新加载之前截断表 -> 每个新表的两个数据流任务

我为第一个表设置的数据流任务是 -> 1.Txt 文件平面源 2.Data Conversion to convert String[DT_STR] to Unicode String [DT_WSTR] 3.Sort -> 我认为会从数据转换,但行仍在重复,这在到达目标之前引发错误(我检查了复选框以删除重复的排序值) 4.OLE DB 目标

错误是:“OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80004005 描述:“违反主键约束 'PK'。无法在对象“dbo.”中插入重复键。重复键值为 (123)."。

在数据查看器中,我不需要的重复记录导致主键约束例如:

数据转换
.sequence 123 姓 名
123 姓 名

第二个数据流任务类似于第一个,只是目标中的表和我使用的列不同。

我查看了很多帖子并研究了这个问题。我是使用 SSIS 的新手,并且从性能角度寻找将这两个新表加载到 OLEDB 目标中的最佳方法。任何建议将不胜感激。

我需要回答的几个问题:

1.在我执行一个包之前,我可以在我的两个表之间设置主键和外键吗?我能够将平面文件加载到我的两个表中,而没有主键和外键引用第二个表中的主键。我需要能够在将来加入这些表,所以我需要保持两个表之间的引用完整性。2. 我在 SSIS 中以正确的方式进行当前正在执行的转换吗?我不能使用查找转换,因为源(平面文件)和目标(OLEDB 源)之间的数据类型不同

如果您需要我提供有关我使用的包或平面文件的更多详细信息以及我的表是如何在 SSMS 中设置的,我可以提供更多详细信息。

4

0 回答 0