在执行部分表复制或完整表复制操作时,如果目标表已存在,则 Data Mover 会使用目标暂存表。staging_to_target 元素的值用于指定如何将目标暂存表中的数据复制到目标表,该设置会覆盖 Data Mover 通常用于将暂存表中的数据复制到目标表的方法。Data Mover 方法可将 MERGE 或 DELETE 与 INSERT/SELECT 结合使用,具体取决于关键列、数据库版本等因素。
如果您已为 staging_to_target 元素指定了 MERGE 值,则覆盖会失败。Data Mover 会确定 MERGE 方法未成功复制数据,并出现错误。
如果您没有 MERGE 语句所需的 UPDATE 权限,请使用 staging_to_target 元素。但是,请谨慎使用该参数,因为 Data Mover 会自动选择最高效的方式来复制数据。
staging_to_target 元素是可选的,仅可在 XML 文件中指定,不作为命令行界面上的参数使用。
staging_to_target 元素在 XML 文件中的 key_columns 元素下。下表列出了 staging_to_target 元素的有效值。
值 | 说明 |
---|---|
NOT_SPECIFIED | (缺省值)推荐使用,因为它会指定 Data Mover 选择效率最高的方式将目标暂存表中的数据复制到目标表。 |
MERGE | 指定使用 MERGE 语句复制数据。Data Mover 会验证 MERGE 语句是否可用于复制数据。如果无法使用 MERGE,则会出现错误。请注意,MERGE 语句不能用于复制多重集表。 |
DELETE_INSERT | 通过 DELETE 语句指定从目标表中删除的行,然后通过 INSERT/SELECT 语句将暂存表中的行复制到目标表。 要删除的行取决于作业。对于部分表复制操作,仅删除与 SQL 查询匹配的行。对于整个表复制操作,将删除所有行。 |
INSERT_ONLY | 指定不从目标表中删除任何行,而是使用 INSERT/SELECT 语句将行从暂存表复制到目标表。 |
DELETE_DISTINCT_INSERT | 通过 DELETE DISTINCT SELECT 语句指定从目标表中删除的行,然后通过 INSERT/SELECT 语句将暂存表中的行复制到目标表。 此方法仅可供部分复制使用,且仅在明确指定时才可使用。 键列为非唯一键时,此方法可提高删除性能。 |
由于 staging_to_target 元素的功能对于各个表有效,因此需要指定 staging_to_target 功能应用到的表,如以下示例所示。
<database selection="unselected"> <name>srcDatabase</name> <table selection="included"> <name>srcTable</name> <sql_where_clause> <![CDATA[WHERE colA > 100]]> </sql_where_clause> <key_columns> <key_column>colA</key_column> </key_columns> <staging_to_target>insert_only</staging_to_target> </table> </database>