【问题标题】:SSIS - Using MERGE T-SQL In OLE DB Source's Command TextSSIS - 在 OLE DB 源的命令文本中使用 MERGE T-SQL
【发布时间】:2011-08-11 18:43:12
【问题描述】:

[SSIS 2008 R2]

我的控制流如下所示:

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

  2. 通过数据流从外部 SQL Server(例如 DB_SOURCE)加载暂存表 -->

  3. 使用 T-SQL MERGE 查询在 staging 之间进行 UPDATE、INSERT 和 DELETE 表和 SSIS 服务器本地的不同数据库(例如 DB_DESTINATION)中的表

第三步,我有一个连接到 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;

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

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

【问题讨论】:

  • 你说你在“数据流”任务上有MERGE 语句,对吗?因为它应该在“执行 SQL 语句”任务上

标签: sql-server-2008 ssis


【解决方案1】:

数据流中的 OLE DB 源需要在列中生成输出的语句(SELECT 语句)。 MERGE 语句对此无效。

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

【讨论】:

  • 哦,伙计,你会认为我已经意识到了,因为我已经在包中有一个 Execute SQL Task :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2016-11-16
相关资源
最近更新 更多