【发布时间】:2016-02-13 06:11:22
【问题描述】:
我已经为 SCD type2 编写了 t-SQL Merge 语句,它工作正常,但是我想要更新插入行数的审计信息。 这里是例:
insert into dbo.MergegeSCD2
(id, firstname, lastname, CREATE_DTTM, MODIF_DTTM, ARCHV_FLAG, EffectiveFrom, EffectiveTo, CurrentFlag)
select
id, firstname, lastname, CREATE_DTTM, MODIF_DTTM, ARCHV_FLAG, EffectiveFrom, EffectiveTo, CurrentFlag
from
(
--DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20))
MERGE dbo.MergegeSCD2 TT
using dbo.MergegeSCD1 SS
on ss.id=tt.id
WHEN NOT MATCHED THEN
INSERT (id, firstname, lastname, CREATE_DTTM, MODIF_DTTM, ARCHV_FLAG, EffectiveFrom, EffectiveTo, CurrentFlag)
values (id, firstname, lastname, CREATE_DTTM, MODIF_DTTM, ARCHV_FLAG,'1800-01-01', NULL ,1)
WHEN MATCHED and tt.[CurrentFlag] = 1
AND exists
(select ss.id, ss.firstname, ss.lastname, ss.CREATE_DTTM, ss.MODIF_DTTM, ss.ARCHV_FLAG
except
select tt.id, tt.firstname, tt.lastname, tt.CREATE_DTTM, tt.MODIF_DTTM, tt.ARCHV_FLAG
)
THEN UPDATE set tt.[CurrentFlag] = 0
, tt.[EffectiveTo] = ss.[MODIF_DTTM]
OUTPUT $Action Action_Taken
, ss.id, ss.firstname, ss.lastname, ss.CREATE_DTTM, ss.MODIF_DTTM, ss.ARCHV_FLAG
, ss.[MODIF_DTTM] AS [EffectiveFrom]
, NULL AS [EffectiveTo]
,1 AS [CurrentFlag]
)
AS MERGE_OUT
WHERE MERGE_OUT.Action_Taken = 'UPDATE';
select @@ROWCOUNT
我使用select @@ROWCOUNT 获得了更新的记录,但我正在为inserted records 苦苦挣扎。有人可以帮忙吗?
【问题讨论】:
标签: sql-server tsql merge sql-server-2008-r2