2014-12-04 110 views
0

我正在尝试使用SSIS从旧系统到新系统进行数据迁移。我有表TableA,TableBOldTable。表如下:从插入获取主键

TableA

  • ID
  • BusinessTypeEnum
  • 其他

TableB

  • ID
  • TableB_ID(FK)
  • PermitNumber

OldTable

  • ID
  • BusinessType
  • PermitNumber

正如你可以看到,TableATableB(其在Ť他新系统)真的被分成两个表格OldTable

我的问题是,为了在TableB中插入一条记录,我需要知道PrimaryKey是在TableA中插入相应记录时分配的。

我原本打算在尝试将记录插入表TableB时执行LookUp但是,TableA中没有存储任何数据可以让我返回。

任何想法?

+1

一种方法是创建一个存储过程来逐行执行此操作,并将其作为SQL命令目标在您的包中调用。每行插入(或不插入)Table_A,使用scope_identity()函数收集ID,然后使用FK插入到Table_B中。另一种方法是使用临时表。在一个批次中插入Table_A,生成FK,然后将它们更新回临时表并插入临时表(带有派生FK) – 2014-12-04 23:50:09

+0

@ Nick.McDermaid,您不需要在存储过程中逐行处理你是否使用OUTPUT子句获取信息。 – HLGEM 2014-12-05 16:41:05

+0

相关[问答](http://stackoverflow.com/a/9709809/181965) – billinkc 2014-12-05 17:23:35

回答

1

这听起来像你使用单一的数据流:源 - >拆分 - >两个目的地(TableA,TableB

如果将进程划分为两个数据流,该怎么办?

  • 第一个只是从OldTable中拉出并加载到TableA
  • 第二 - 加载到TableB --again从OldTable拉也做一个Merge Join,或者一个从Lookup会从TableA相关标识值,该表。

(注:第二流动需要被设置为它依赖于OldTable的数据被插入到TableA其运行之前仅通过优先约束第一完成之后运行。)

0

您可以在我们的insert语句中使用OUTPUT Clause来返回标识列的值。

INSERT TableA (BusinessTypeEnum, Other) 
OUTPUT INSERTED.ID 
VALUES ('abc', 'def') 

除了插入一条记录,上面的行为就像一个select。

我应该提到在OUTPUT子句中有一个INTO子句可以用于批量插入。上面的例子是针对单个记录插入的。