Может ли эта модификация работать на вас? Я добавил подзапрос к вашему [Вставить значения ...]
Create Table #DIM_Object
(
ObjectId Int,
[Name] NVarChar(25),
End_Date Date,
Eff_Date Date,
Current_Flag Char(1),
Versie Int
)
Insert Into #DIM_Object Values
(1,'Me','2019-01-06','2020-12-31','y',1)
Create Table #PMEObject
(
ObjectId Int,
[Name] NVarChar(25),
End_Date Date,
Eff_Date Date,
Current_Flag Char(1),
Versie Int
)
Insert Into #PMEObject Values
(2,'You','2019-01-30','2019-01-07','n',1),
(1,'Him','2019-01-06','2020-12-31','n',1)
INSERT INTO #DIM_Object
SELECT ObjectId
, Name
, Eff_Date
, End_Date
, Current_Flag
, Versie
FROM (
MERGE #DIM_Object CM
USING #PMEOBJECT CS
ON ( CM.ObjectId = CS.ObjectId )
WHEN NOT MATCHED
THEN
INSERT VALUES
( CS.ObjectId
, CS.Name
, CONVERT(CHAR(10), GETDATE() - 1, 101)
, '12/31/2199'
, 'y'
, (Select Versie From #PMEObject p Where p.ObjectId = CS.ObjectId ) + 1
)
WHEN MATCHED AND CM.Current_Flag = 'y'
AND ( CM.Name <> CS.Name )
THEN
UPDATE SET
CM.Current_Flag = 'n' ,
CM.End_date = CONVERT(CHAR(10), GETDATE() - 2, 101)
OUTPUT
$Action Action_Out
, CS.ObjectId
, CS.Name
, CONVERT(CHAR(10), GETDATE() - 1, 101) Eff_Date
, '12/31/2199' End_Date
, 'y' Current_Flag
, +1 Versie
) AS MERGE_OUT
WHERE MERGE_OUT.Action_Out = 'UPDATE';
Результат:
ObjectId Name End_Date Eff_Date Current_Flag Versie
1 Me 2019-01-05 2020-12-31 n 1
2 You 2019-01-06 2199-12-31 y 2
1 Him 2019-01-06 2199-12-31 y 1