使用merge来跟踪SQL中的更改

时间:2018-03-21 13:50:13

标签: sql sql-server

我们正在使用merge更新上次更新的值,在数据库中进行增量更新。这很有效,但是我们也会在每天更新整个表格时跟踪更改。

理想情况下,我们希望跟踪合并期间发生变化的所有内容。虽然之前我们会拿旧表和新表并将它们彼此删除,以查看添加的内容和&删除,我们想从合并中得到这个。

以下是我们的精简合并:

MERGE data_warehouse.dbo.data_table AS data_table
USING (
SELECT
   id AS id,
  target_date
  po
FROM #exploded_data_table
WHERE id IN (SELECT id FROM #updated_records) AS updates

ON (data_table.id = updateds.id)

WHEN MATCHED AND (data_table.id IN (SELECT id FROM #updated_records) AND (data_table.id <> updated.id OR
  data_table.target_date <> updates.target_date OR
  data_table.po <> updates.po))

  THEN UPDATE SET
  id = updates.id,
  target_date = updates.target_date,
  po = updates.po

WHEN NOT MATCHED BY TARGET THEN INSERT
(id,
target_date,
po
)
VALUES
(updates.id,
updates.target_date,
updates.po
)

使用合并功能,我们可以获得插入&amp;但是,我们想知道是否有可能获得更新的项目。

我们当前的代码将合并信息放入临时表中,然后按如下方式从中拉出:

OUTPUT $action,DELETED.*,INSERTED.*;

现在这样可行,但似乎正在添加

UPDATED.*

不起作用。理想情况下,我们也想在那里获得更新的更改。是否有可能获得所有三个变更行动输出?

谢谢。

编辑:我在重读了一些原本正在寻找的材料后发现答案似乎在这里:Using the Output Clause with T-SQL Merge

我将不得不做一些进一步的测试以获得我正在寻找的输出,但似乎更新应该贴上标签,不确定为什么他们之前没有显示出来。

0 个答案:

没有答案