2014-10-10 93 views
0

我有> 10個包需要更新/插入數據流。我可以這樣做:SSIS(在SQL Server 2012中):插入查找組件

  • Lookup =>匹配輸出分支=> OLE DB命令。
  • Lookup =>不匹配輸出分支=> OLE DB目標。

http://www.rad.pasfu.com/index.php?/archives/46-SSIS-Upsert-With-Lookup-Transform.html) (http://jahaines.blogspot.com/2009/09/sss-performing-upsert.html

不過,我想知道是否有某種方式我可以使用查詢「合併」的聲明(或任何其他)組件,這樣我可以做些什麼像:

MERGE [DBPrac].[dbo].[TargetTable] AS tt 
USING [SourceTable] AS st ON tt.Id = st.Id 

WHEN MATCHED THEN --* Update the records, if record found based on Id. 
    UPDATE 
     SET tt.SSN = st.SSN 
      ,tt.FirstName = st.FirstName 
      ,tt.MiddleName = st.MiddleName 
      ,tt.LastName = st.LastName 
      ,tt.Gender = st.Gender 
      ,tt.DateOfBirth = st.DateOfBirth 
      ,tt.Email = st.Email 
      ,tt.Phone = st.Phone 
      ,tt.Comment = st.Comment 

WHEN NOT MATCHED BY TARGET THEN --* Insert from source to target. 
    INSERT (Id, SSN, FirstName, MiddleName, LastName, Gender, DateOfBirth, Email, Phone, Comment) 
    VALUES (st.Id, st.SSN, st.FirstName, st.MiddleName, st.LastName, st.Gender, st.DateOfBirth, st.Email, st.Phone, st.Comment) 
; 

SELECT @@ROWCOUNT; 

SET IDENTITY_INSERT [dbo].[TargetTable] OFF 
GO 

到目前爲止,我嘗試:

  • 在查找組件的 「高級」 鍋在「自定義查詢」中,我嘗試使用上面的查詢,但偶然發現了「SourceTable」。不知道如何在「自定義查詢」中獲得輸入記錄集 (不知道它是否可能)。

任何幫助和/或指針會很好。

回答

0

是的,你可以使用MERGE,但你需要將你的數據加載到臨時表中。這是'ELT'方法 - 提取,加載(到數據庫),轉換,而不是'ETL'方法 - 提取,轉換(包中),加載(到數據庫中)

我通常會找到ELT方法更快,更易維護,如果你不介意使用SQL腳本。當然,單個批量更新比在SSIS中發生的逐行更新更快速

0

如果我正確理解你的問題,只需使用執行SQL任務執行合併語句即可。那麼你不需要任何查找。我們使用相同的策略來爲我們的倉庫的最終加載分段。