The highlights in the image below shows the logic I want to implement. I realize the syntax is incorrect.
Is there a way to conditionally update a record in a MERGE statement only if it the value of one of its columns in the target table is NULL, and the corresponding value in the source table is not null?
How would you suggest re-writing this?
MERGE dbo.input_311 AS [t]
USING dbo.input_311_staging AS [s]
ON ([t].[unique key] = [s].[unique key])
WHEN NOT MATCHED BY TARGET
THEN INSERT(t.[Created Date]) VALUES(s.[Created Date])
WHEN MATCHED
THEN UPDATE SET(t.[Created Date] = s.[Created Date]
WHERE s.[Created Date] IS NOT NULL
AND t.[Created Date] IS NULL)
OUTPUT deleted.*, $action, inserted.*;
GO
The UPDATE statement will most likely be more efficient than a MERGE if the all you are doing is updating rows. Given the complex nature of the MERGE command's match condition, it can result in more overhead to process the source and target rows.
The MERGE statement doesn't have a WHERE clause.
Common Table expressions are part of an SELECT-Statement, but cannot used everywhere where a SELECT-statement is allowed (sometimes only a FULL-Select - without CTE is allowed, for example in an UPDATE-Statement).
The MERGE statement can have, at most, two WHEN MATCHED clauses. If two clauses are specified, the first clause must be accompanied by an AND <search_condition> clause. For any given row, the second WHEN MATCHED clause is only applied if the first isn't.
You might be able to use When Matched And (s.[Created Date] Is Not Null And t.[Created Date] Is Null) Then Update ...
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With