sql – 使用带有Scope_IDENTITY的MERGE INTO
发布时间:2020-05-24 15:42:24 所属栏目:MsSql 来源:互联网
导读:当Merge into使用以下语句执行插入时,Scope_Identity返回正确的代理键信息.但是,当执行更新时,Scope_Identity和@@ Identity都会返回下一个可用的代理键.当我添加输出时,我在update和insert上都得到null. 如何在更新和插入上返回代理键? DECLARE @Surrogate_K
|
当Merge into使用以下语句执行插入时,Scope_Identity返回正确的代理键信息.但是,当执行更新时,Scope_Identity和@@ Identity都会返回下一个可用的代理键.当我添加输出时,我在update和insert上都得到null. 如何在更新和插入上返回代理键? 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
)
output CurrentSet.*,@Surrogate_KEY ;
print @Surrogate_KEY
print @@IDENTITY
print SCOPE_IDENTITY()
解决方法使用 OUTPUT clause中的inserted伪表:DECLARE @Surrogate_KEY bigint
MERGE INTO [dbo].[MyTable] ChangeSet
USING (SELECT @NaturalKey1 AS NaturalKey1,blah
)
output inserted.* ;
这将返回语句末尾表中的值(对于受影响的行). (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 数据库设计 – 如何在关系数据库中最好地存储数字列表?
- 数据库 – 在数据仓库中表示时间间隔的最佳做法是什么?
- 如何在sql server中控制将null int字段转换为varchar?
- 清空SQL Server日志 与set recovery simple
- ms-access – 如何控制Access数据库的用户权限?
- sql – 从table1中选择*不存在于table2中的条件
- MS SQL Server2014链接到MS SQL Server 2000的解决方案及问
- MySQL replace函数替换字符串语句的用法
- sql-server-2005 – 用户定义的函数输出进行Nhibernate过滤
- sql-server – SS Analysis Services(SSAS)数据库架构比较工
