Когда Merge into
делает insert
со следующим утверждением, Scope_Identity
возвращает правильную ключевую информацию о суррогатах. Однако, когда выполняется update
и Scope_Identity
и @@Identity
, возвратите следующий доступный суррогатный ключ. И когда я добавил output
, я получаю нуль на обоих update
и insert
.Использование MERGE INTO с Scope_IDENTITY
Как вернуть суррогатную клавишу как на update
, так и на 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