小编Ken*_*enL的帖子

将MERGE INTO与Scope_IDENTITY一起使用

Merge into做一个insert用下面的语句,Scope_Identity返回正确的代理键信息.但是当update执行两者Scope_Identity@@Identity返回下一个可用的代理键时.当我添加的时候output,我update和两个都得到了null insert.

如何在updateinsert?上返回代理键?

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
       ) …
Run Code Online (Sandbox Code Playgroud)

sql t-sql upsert sql-server-2008

8
推荐指数
2
解决办法
6487
查看次数

标签 统计

sql ×1

sql-server-2008 ×1

t-sql ×1

upsert ×1