SSIS - 在OLE DB源的命令文本中使用MERGE T-SQL

时间:2011-08-11 18:43:12

标签: sql-server-2008 ssis

[SSIS 2008 R2]

我的控制流程如下所示:

  
      
  1. 在SSIS服务器本地的数据库(例如DB_Staging)中截断登台表 - >

  2.   
  3. 通过外部SQL Server(例如DB_SOURCE)的数据流加载登台表 - >

  4.   
  5. 使用T-SQL MERGE查询在登台之间进行UPDATE,INSERT和DELETE   表和SSIS服务器本地不同DB(例如DB_DESTINATION)中的表

  6.   

对于第三步,我有一个连接到DB_DESTINATION的数据流任务。此任务的数据流有一个OLE DB源设置为SQL命令包含T-SQL MERGE语句(为简洁起见,查询剪切):

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;

问题是,我在OLE DB源中的T-SQL MERGE查询上收到验证错误。我是SSIS的新手,所以我不确定是什么问题。加载登台表和MERGE的查询工作正如我在Management Studio中测试过的那样。有人可以提供任何指导吗?来自BIDS的验证错误消息是:

  

验证错误。 DFT_MergeData OLEDB_DB_DESTINATION [1]:无列   SQL命令返回了信息。

1 个答案:

答案 0 :(得分:2)

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

如果要使用MERGE语句,可以在控制流中的“执行SQL语句”任务中使用它,这将替换数据流任务。

相关问题