您的位置:首页 > 其它

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

2011-06-23 13:45 465 查看
使用 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> 中只能引用目标表中的列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐