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