2011-08-11 50 views
1

[SSIS 2008 R2]SSIS - 使用合併T-SQL中的OLE DB源的命令文本

我的控制流程是這樣的:在一個DB

  1. 截斷臨時表(如DB_Staging )本地的SSIS服務器 - >

  2. 負載臨時表通過一個數據流從外部SQL Server(例如DB_SOURCE) - >

  3. 使用T-SQL MERGE查詢更新,插入和刪除登臺 表與不同DB中的表(例如, DB_DESTINATION)本地的SSIS服務器

對於第三步,我有一個數據流任務連接到DB_DESTINATION。此任務的數據流有一個OLE DB源設置爲包含T-SQL MERGE語句(查詢剪斷,爲了簡潔)SQL命令:

MERGE dbo.destination AS dest 
USING (SELECT * FROM DB_STAGING.dbo.source) AS src 
ON  ... 
    WHEN MATCHED 
      AND ... 
      THEN UPDATE SET 
       ... 
    WHEN NOT MATCHED BY TARGET 
      THEN INSERT 
       ... 
    WHEN NOT MATCHED BY SOURCE 
      AND ... 
      THEN DELETE; 

問題是,我在T-得到一個驗證錯誤SQL OLE DB源中的MERGE查詢。我是SSIS的新手,所以我不確定有什麼問題。加載臨時表和MERGE工作的查詢,正如我在Management Studio中測試過的那樣。任何人都可以提供指導嗎?來自BIDS的驗證錯誤消息是:

驗證錯誤。 DFT_MergeData OLEDB_DB_DESTINATION [1]:沒有列 信息是由SQL命令返回的。

+0

你說你有一個「數據流」任務上的'MERGE'語句,是否正確?,導致它應該在「執行SQL語句」任務 – Lamak

回答

2

數據流中的OLE DB源需要一個在列(SELECT語句)中產生輸出的語句。 MERGE聲明對此不是一個有效的陳述。

如果您想使用MERGE語句,您可以在控制流中的執行SQL語句任務中使用它,該任務將取代數據流任務。

+0

哦,你會認爲我會意識到因爲我已經有一個執行SQL任務在包:) – HardCode

相關問題