Merge 命令是否进行合法更新?

Does the Merge command do legit updates?

我正在使用 MERGE 命令在 MSSQL 2008 上测试 CDC(捕获数据更改)。当记录匹配时我运行一个update语句,但是在CDC中改变table这个Update是一系列的[Delete and Insert]操作。

我已经确认 MERGE 运行更新部分,只是不确定为什么这会转化为每个更新记录的删除和插入...

如果您有 300 条相同的记录(源和目标)并在匹配时合并 "updates" 它们。您将在 CDC

中拥有 600 条记录

MERGE 命令可以执行 'legit' 更新,您在 CDC 数据中看到 600 行 300 次更新,因为 CDC 会跟踪受影响的每一行的前后情况。查看联机丛书中 this 文章的 'Change Table' 部分。

Each insert or delete operation that is applied to a source table appears as a single row within the change table. The data columns of the row that results from an insert operation contain the column values after the insert. The data columns of the row that results from a delete operation contain the column values before the delete. An update operation requires one row entry to identify the column values before the update, and a second row entry to identify the column values after the update.

更新:

我的合并语句的更新部分是 运行...任何匹配都会触发完整的 table 更新。另外,我被抛弃了,因为合并先删除,然后插入,而不是更新。至少 CDC 的记录是这样

如果在启用了 cdc 的目标 table 上排除作为 Merge 的 UPDATE SET 操作中的主键的列,它将在您的捕获实例中正确记录更新 table。