使用merge关键字对数据进行 insert 或update操作

使用 merge 对数据进行 插入或 修改的操作

 
  
CREATE procedure InsertUnitMeasure @a nvarchar ( 100 ), @b nvarchar ( 100 )
as
begin
set nocount on
merge
temp as target -- 数据目标源 temp是表
using ( select @a , @b ) as source (a,b) -- 数据源
on (target.a = source.a) -- 比较的字段
when matched then update set b = source.b -- 如果符合 就更新 b字段
when not matched then insert (a,b) values (source.a,b); -- 如果不符合就插入
-- output deleted.*,$action,inserted.* into MyTempTable; --此句 中的 $action没法理解 只能想当于执行的类型
end

MERGE 语句最多可以有两个 WHEN MATCHED 子句。如果指定了两个子句,则第一个子句必须同时带有一个 AND <search_condition> 子句。对于任何给定的行,只有在未应用第一个 WHEN MATCHED 子句的情况下,才会应用第二个 WHEN MATCHED 子句。如果有两个 WHEN MATCHED 子句,那么其中的一个必须指定 UPDATE 操作,而另一个必须指定 DELETE 操作。如果在 <merge_matched> 子句中指定了 UPDATE,并且根据 <merge_search_condition>,<table_source> 中的多个行与 target_table 中的某一行匹配,则 SQL Server 将返回错误。MERGE 语句无法多次更新同一行,也无法更新和删除同一行。

指定对于 <table_source> ON <merge_search_condition> 返回的每一行,如果该行与 target_table 中的行不匹配但是满足其他搜索条件(如果存在),则在 target_table 中插入一行。要插入的值是由 <merge_not_matched> 子句指定的。MERGE 语句只能有一个 WHEN NOT MATCHED 子句。

MERGE 语句最多可以有两个 WHEN NOT MATCHED BY SOURCE 子句。如果指定了两个子句,则第一个子句必须同时带有一个 AND <clause_search_condition> 子句。对于任何给定的行,只有当未应用第一个 WHEN NOT MATCHED BY SOURCE 子句时才会应用第二个子句。如果有两个 WHEN NOT MATCHED BY SOURCE 子句,那么其中的一个必须指定 UPDATE 操作,而另一个必须指定 DELETE 操作。在 <clause_search_condition> 中只能引用目标表中的列。


转载于:https://www.cnblogs.com/shikyoh/archive/2011/06/23/2088051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值