When Merge into
performs insert
with the following expression, Scope_Identity
returns the correct surrogate key information. However, when a update
is performed on both Scope_Identity
and @@Identity
, it returns the next available surrogate key. And when I added output
, I get zero on both update
and insert
.
How to return a surrogate key for both update
and insert
?
DECLARE @Surrogate_KEY bigint MERGE INTO [dbo].[MyTable] ChangeSet USING (SELECT @NaturalKey1 AS NaturalKey1, @NaturalKey2 AS NaturalKey2, @NaturalKey3 AS NaturalKey3, @Surrogate_KEY AS Surrogate_KEY) CurrentSet ON ChangeSet.NaturalKey1 = CurrentSet.NaturalKey1 AND ChangeSet.NaturalKey2 = CurrentSet.NaturalKey2 AND ChangeSet.NaturalKey3 = CurrentSet.NaturalKey3 WHEN MATCHED THEN UPDATE SET blah, blah, blah WHEN NOT MATCHED THEN INSERT VALUES ( blah, blah, blah ) output CurrentSet.*, @Surrogate_KEY ; print @Surrogate_KEY print @@IDENTITY print SCOPE_IDENTITY()
Kenl
source share