将变更应用到目标

在用于执行变更数据增量加载的 Integration Services 包的数据流中,第三个任务(即最后一个任务)是将变更应用到目标。您将需要一个组件应用插入操作、一个组件应用更新操作以及一个组件应用删除操作。

注意注意

为用于执行变更数据增量加载的包设计数据流的过程中,第二个任务是分隔插入、更新和删除操作。有关此组件的详细信息,请参阅处理插入、更新和删除。有关用于执行变更数据增量加载的包的总体创建过程的说明,请参阅通过变更数据捕获改善增量加载

若要查看演示包中变更数据捕获的用法的完整的、端对端示例,请参阅 Codeplex 上的 Integration Services 示例。

应用插入操作

若要应用插入操作,请使用 OLE DB 目标,因为新行不需要任何特殊处理。

使用 OLE DB 目标处理插入操作

  1. 在**“数据流”**选项卡上,添加 OLE DB 目标。

  2. 将包含来自条件性拆分转换的插入操作的输出连接到 OLE DB 目标。

  3. 在**“OLE DB 目标编辑器”“连接管理器”**页上,选择下列选项:

    1. 为目标数据库选择或创建一个 OLE DB 连接管理器。

    2. 选择**“数据访问模式”**选项,然后选择包含目标列的目标表或输入包含目标列的 SQL 语句。

  4. 在编辑器的**“映射”**页上,将变更数据的相应列映射到目标表。

应用更新操作

若要应用更新操作,请使用 OLE DB 命令转换。因为您必须通过参数化的 UPDATE 语句使用新的列值一次更新一行,所以要使用此转换。

注意注意

还可以使用目标组件来应用更新操作。如果使用此方法,则将使用目标组件将行保存到为此而创建的临时表中。然后,使用执行 SQL 任务根据临时表对目标执行大容量更新和大容量删除操作。

使用 OLE DB 命令转换处理更新操作

  1. 在**“数据流”**选项卡上,添加 OLE DB 命令转换。

  2. 将包含来自条件性拆分转换的更新操作的输出连接到 OLE DB 命令转换。

  3. 在**“OLE DB 命令的高级编辑器”“连接管理器”**选项卡上,为目标数据库选择或创建一个 OLE DB 连接管理器。

  4. 在**“OLE DB 命令的高级编辑器”“组件属性”**选项卡上,对于 SqlCommand,输入参数化的 UPDATE 语句。

    例如,Customer 表的 UPDATE 语句可能具有以下语法:

    update CDCSample.Customer
    set TerritoryID  = ?,
        CustomerType  = ?,
        rowguid  = ?,
        ModifiedDate  = ?
    where CustomerID = ?
    
  5. 在编辑器的**“列映射”**选项卡上,将变更数据的相应列映射到 UPDATE 语句中的参数。

应用删除操作

若要应用删除操作,请使用 OLE DB 命令转换。因为您必须通过参数化的 DELETE 语句使用唯一标识行的列值一次删除一行,所以要使用此转换。

注意注意

还可以使用目标组件来应用删除操作。如果使用此方法,则将使用目标组件将行保存到为此而创建的临时表中。然后,使用执行 SQL 任务根据临时表对目标执行大容量更新和大容量删除操作。

使用 OLE DB 命令转换处理删除操作

  1. 在**“数据流”**选项卡上,向数据流中添加 OLE DB 命令转换。

  2. 将包含来自条件性拆分转换的删除操作的输出连接到 OLE DB 命令转换。

  3. 打开“高级编辑器”以配置该转换。

  4. 在**“OLE DB 命令的高级编辑器”“连接管理器”**选项卡上,为目标数据库选择或创建一个 OLE DB 连接管理器。

  5. 在**“OLE DB 命令的高级编辑器”“组件属性”**选项卡上,对于 SqlCommand,输入参数化的 DELETE 语句。

    例如,Customer 表的 DELETE 语句可能具有以下语法:

    delete from Customer where CustomerID = ?
    
  6. 在编辑器的**“列映射”**选项卡上,将变更数据的相应列映射到 DELETE 语句中的参数。

使用 MERGE 功能优化插入和更新操作

可以通过将特定的变更数据捕获选项与 Transact-SQL MERGE 关键字结合使用,来优化插入操作和更新操作的处理。有关 MERGE 关键字的详细信息,请参阅 MERGE (Transact-SQL)

在用于检索变更数据的 Transact-SQL 语句中,调用 cdc.fn_cdc_get_net_changes_<capture_instance> 函数时可以将 all with merge 指定为 row_filter_option 参数的值。当此变更数据捕获函数不需要执行用于区分插入操作和更新操作的额外处理时,它的操作效率会大大提高。将 all with merge 指定为参数值时,对于删除操作来说,变更数据的 __$operation 值为 1,而对于插入操作或更新操作引起的变更来说,该值为 5。有关用于检索变更数据的 Transact-SQL 函数的详细信息,请参阅检索和了解变更数据。在使用 all with merge 参数值检索变更之后,可以应用删除操作,并将剩余行输出到临时表或中间临时表中。然后,在下游执行 SQL 任务中,可以使用一个 MERGE 语句将所有插入操作或更新操作从中间临时表应用到目标中。

Integration Services 图标(小) 使 Integration Services 保持最新

若要从 Microsoft 获得最新的下载内容、文章、示例和视频,以及从社区获得所选解决方案,请访问 MSDN 或 TechNet 上的 Integration Services 页:

若要获得有关这些更新的自动通知,请订阅该页上提供的 RSS 源。