2014-12-04 114 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子句可以用於批量插入。上面的例子是針對單個記錄插入的。