Использование MERGE INTO с Scope_IDENTITY

Когда Слияние в делает вставку со следующим утверждением, Scope_Identity возвращает правильную информацию о замещающем ключе. Однако при обновлении и Scope_Identity, и @@Identity возвращают следующий доступный суррогатный ключ. И когда я добавил вывод , я получаю ноль на обоих обновлениях и вставьте .

Как вернуть суррогатный ключ на обоих обновлениях и вставьте ?

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() 
8
задан feetwet 13 August 2016 в 20:39
поделиться