我的问题与数据迁移有关。我在SQL中的临时表中有大量数据,我正在处理将该数据迁移到目标sql server的任务。和目标数据模型与暂存有点不同。
这是一个例子:
在登台数据库中,有一个雇主表如下:
| Name | Mail Address | Mail City | Physical Address | Physical City |
| ------ | ------------ | --------- | ---------------- | ------------- |
| Emp1 | 123 Street | City 1 | 456 Avenue | City 1 |
| Emp2 | 999 Street | City 1 | 456 Avenue | City 1 |
在目标数据库中,有三个表如下:
雇主(EmpID是身份字段)
| EmpID | Emp Name |
|------ | -------- |
| 1 | Emp1 |
| 2 | Emp2 |
地址(AddID是身份字段)
| AddID | AddressLine | Address City |
| ----- | ----------- | ------------ |
| 1 | 123 Street | City 1 |
| 2 | 456 Avenue | City 1 |
| 3 | 999 Street | City 1 |
| 4 | 456 Avenue | City 1 |
EmployerAddressMapping(EmpAddID是身份,AddID和EmpID是外键)
| EmpAddID | EmpID | AddID | AddFlag |
| -------- | ----- | ----- | ------- |
| 1 | 1 | 1 | M |
| 2 | 1 | 2 | P |
| 3 | 2 | 3 | M |
| 4 | 2 | 4 | P |
我想使用SSIS迁移数据。我已经使用简单的数据流任务迁移了雇主表。但是由于身份字段和外键关系,现在我很难迁移其余的表。特别是对于不同雇主可能存在重复记录的地址表,因此很难先插入所有地址,然后通过查找新插入的地址来管理链接。
SSIS有什么方法可以达到这个目的吗?
答案 0 :(得分:0)
使用两个单独的DFT来加载地址表。让以下两个是加载它们的查询。确保在加载到目标之前存在查找以检查相应的地址是否存在以避免重复 -
--Query 1 - Mailing Address
select distinct
[Mail Address]
,[Mail City]
from dbo.Staging;
--Query 2- Phsyical Address
select distinct
,[Physical Address]
,[Physical City]
from dbo.Staging;
正如您所说,雇主的地址可能重复,首先必须使用唯一的设置填充地址表。
在第三个用于填充EmployerAddressMapping的DFT中 -
从源代码获取员工姓名和地址,作为OLE DB源的一部分,如下所示 -
选择姓名 ,[邮件地址] ,[邮件城] ,'M'为'AddFlag' 来自dbo.Staging 联合所有 选择名称 ,[实际地址] ,[实体城市] ,'P'为'AddFlag' 来自dbo.Staging;
使用Emp Name在Emp表上查找并获取Emp Id
当然,除此之外,请确保您获取增量记录的业务逻辑已到位。
我用这种方法看到的一个问题是对Emp Name的依赖是唯一的。如果不是,则需要将源主键作为Emp表的一部分存在,如Nick所述。如果他们那么它应该没问题