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