2012-05-31 42 views
3

我已經創建了用於將記錄從一個表導入到另一個表的SSIS包。它正常運行,但在源表中記錄的數量在不斷增加。所以我正在執行包。在包中插入新行之前,我從Destination表中截斷記錄,然後執行包。用於使用SSIS將行追加到目標的SQL查詢

 SQL TASK -1 

     Truncate table "OLE DB Destination" 

     SQL TASK -1 

     CREATE TABLE "OLE DB Destination" (

      "ZZCOIL_APPR10" NVARCHAR2(20), 
      "ZZSTORAGE_LOC10" NVARCHAR2(15), 
      "ZZDETAIL1" NVARCHAR2(40), 
      "ZZTOTAL_QTY" NUMBER(7, 2), 
      "ZZNOTE1" NVARCHAR2(100), 
      "ZZNOTE2" NVARCHAR2(100) 
              ) 

但我不希望這種解決方案,我想插入只有剩餘記錄不在目標表中。

+0

那麼你怎麼知道哪些數據是「新」?例如,源表是否具有像「CreateDate」和「UpdateDate」這樣的列?它是否有一個主鍵值爲每個新行增加?那些不是新的行,但數據已經更新的行呢?如何從現有數據中識別出某些變化?如果源代碼沒有這些東西,你可以添加它們嗎? SQL Server的源和目標都是? – Pondlife

+0

表是有更多的列ID ,我也有日期字段(記錄日期),所以我怎麼能通過使用其中之一跟蹤。 –

回答

2

您需要查找轉換。

你有這樣的事情:

enter image description here

所以你的組件將具有查找查詢爲「從destinationTable會選擇ID」例如,你將通過ID匹配。在目標表上找不到的所有源ID將被髮送到「Lookup No Match Output」路徑,然後插入它們。

有幾個關於如何在互聯網上使用此組件的示例。 Here是一個

+0

我從來沒有使用過這種方法,它是如何執行很多行(比如數千萬)?大概這種方法只能處理新的行,而不是更改的行? – Pondlife

+0

根據源數據的質量,您可能還必須執行聚合以消除任何重複的密鑰 – GShenanigan

0

您可以使用SSIS表格差分分量.....