使用SSIS加载多个表以保持外键关系

mvm*_*mvm 7 sql-server ssis

我正在尝试使用SSIS将数据从单个文件(具有百万+记录)加载到SQL Server上的多个表中,同时保持文件中定义的关系.

为了更好地举例说明,我们假设我正在尝试加载一个包含员工姓名的文件,他们过去占用的办公室以及用标签分隔的职位名称历史.

文件:

EmployeeName<tab>OfficeHistory<tab>JobLevelHistory
John Smith<tab>501<tab>Engineer
John Smith<tab>601<tab>Senior Engineer
John Smith<tab>701<tab>Manager
Alex Button<tab>601<tab>Senior Assistant
Alex Button<tab>454<tab>Manager
Run Code Online (Sandbox Code Playgroud)

如果我的Office数据库架构具有以下表:

Employee (nId, name)
Office (nId, number)
JobTitle (nId, titleName)
Employee2Office (nEmpID, nOfficeId)
Employee2JobTitle (nEmpId, nJobTitleID)
Run Code Online (Sandbox Code Playgroud)

如何使用SSIS将文件加载到自动生成员工,Office和JobTitle的ID以及维护员工和办公室以及员工和职位标题之间的关系上的架构中?

所以在这种情况下.表格应如下所示:

Employee
1 John Smith
2 Alex Button

Office
1 501
2 601
3 701
4 454

JobTitle
1 Engineer
2 Senior Engineer
3 Manager
4 Senior Assistant

Employee2Office
1 1
1 2
1 3
2 2
2 4

Employee2JobTitle
1 1
1 2
1 3
2 4
2 3
Run Code Online (Sandbox Code Playgroud)

我是SSIS的新手,并且在执行数据流任务时没有使用自动生成ID和建立外键关系.任何指针将不胜感激.

谢谢!

小智 1

如果您确定要加载的数据的参照完整性良好,则可以在脚本任务中禁用外键约束,然后使用并行数据加载执行数据流,并在数据加载完成后再次启用约束。如果数据有问题,操作就会失败。不过,您必须设计回滚或清理策略。

另一个选项只是以串行方式加载数据,从主表开始并在子表上完成。我认为这是“更安全”的选项,因为它不会将您的数据完整性暴露给在 ETL 加载时可能使用这些表的其他用户。我更喜欢这个选项。