SSIS - 使用合并T-SQL中的OLE DB源的命令文本

问题描述:

[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

数据流中的OLE DB源需要一个在列(SELECT语句)中产生输出的语句。 MERGE声明对此不是一个有效的陈述。

如果您想使用MERGE语句,您可以在控制流中的执行SQL语句任务中使用它,该任务将取代数据流任务。

+0

哦,你会认为我会意识到因为我已经有一个执行SQL任务在包:) – HardCode