使用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> 中只能引用目标表中的列。


posted @ 2011-06-23 13:45  Shikyoh  阅读(910)  评论(1编辑  收藏  举报