I want to merge current inventory data into a temporal (SCD 2) table. I've worked it out, but my only issue now is that once there is a match, it should update (age out) the existing row AND also insert a new row of data.
How would I do this? I can't figure out the syntax to run both & it doesn't seem to accept stored procedures.
MERGE [MyDB].[dbo].[TemporalInventory] AS Target
USING [OtherDB].[dbo].[bvc_Product] AS Source
ON Target.[ProductID] = Source.[ID]
WHEN MATCHED
AND (Target.[AggregatePhysicalQty] <> Source.[AggregatePhysicalQty]
AND [DateExpired] > GETDATE() )
THEN
UPDATE SET
Target.[DateExpired] = GETDATE()
-- INSERT ([ProductID],[AggregatePhysicalQty],[DateAdded],[DateUpdated],[DateExpired])
-- VALUES (Source.ID, Source.[AggregatePhysicalQty], GETDATE(), GETDATE(), '5000-01-01 00:00:00')
WHEN NOT MATCHED BY TARGET
AND (Source.ClientID='100'
AND Source.Status ='1'
AND LEN(Source.ShadowOf) = 0
AND Source.IsBundle = 0)
THEN
INSERT ([ProductID],[AggregatePhysicalQty],[DateAdded],[DateUpdated],[DateExpired])
VALUES (Source.ID, Source.[AggregatePhysicalQty], GETDATE(), GETDATE(), '5000-01-01 00:00:00')
WHEN NOT MATCHED BY SOURCE THEN DELETE;