Merge关键字在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。 可以想象出,需要使用Merge的场景比如: 数据同步 数据转换 基于源...
CREATE TABLE tTable(id INT ,f1 VARCHAR(10) ,f2 VARCHAR(10) ,f3 VARCHAR(10))
GO
INSERT INTO tTableSELECT 11 ,12 , 13 , 14
INSERT INTO tTableSELECT 13 ,24 ,25,26GOCREATE TABLE tTable2(id INT ,f5 VARCHAR(10) ,f6 VARCHAR(10))
GOCREATE PROC MERGETest
ASBEGINMERGE INTO tTable2 T1USING( SELECT id ,f3 ,f2 FROM tTable )T2 ON ( T1.id = T2.id )WHEN MATCHED THEN UPDATE SET T1.f5 = T2.f2 ,T1.f6 = T...
1///<summary> 2/// 修改:添加条件: AND roleModule.FuncCode = tvpRoleModule.FuncCode3///</summary> 4privatestaticreadonlystring SQL_PernissionReRoleModuleCreate = @"MERGE [dbo].[PernissionReRoleModule] AS roleModule5USING @tvp AS tvpRoleModule6ON (roleModule.RoleId = tvpRoleModule.RoleId AND roleModule.ModuleId = tvpRoleModule.ModuleId AND roleModule.FuncCode = tvpRoleModule.FuncCode)7WHEN MATCHED8 ...
create table #ttt(id int,name nvarchar(10));merge into #ttt t using (select 1 as id ,‘eee‘ as name ) b on (t.id = b.id) when matched then update set t.name = b.name when not matched then insert(id,name) values(b.id,b.name);
select * from #ttt;merge into ausing b on (a.id = b.id) when matched then update set a.name = b.name when not matched then insert(id,name) values(b.id,b.name);select * from...
Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。
可以想象出,需要使用Merge的场景比如: 数据...
1 use AdventureWorks2 go3 createprocedure dbo.InsertUnitMeasure @UnitMeasureCodenchar(3),@Namenvarchar(25)4 as5 begin6 set nocount on;7 update Production.UnitMeasure set Name=@Namewhere UnitMeasureCode=@UnitMeasureCode8 if(@@ROWCOUNT=0)9 begin10 insertinto Production.UnitMeasure(Name,UnitMeasureCode)values(@Name,@UnitMeasureCode)11 end12 end13 go记得见过这样的笔试题目,要求是插入不存在的行,只要把...
merge TableName as target using( values(‘FIELDVALUE1‘,‘FIELDVALUE2‘)) as source (FIELDNAME1,FIELDNAME2) on target.FIELDNAME1= source.FIELDNAME1 when matched then update set FIELDNAME2= source.FIELDNAME2 when not matched then insert (FIELDNAME1,FIELDNAME2) values (source.FIELDNAME1,source.FIELDNAME2); 这是用SqlServer 的MERGE来实现AddOrUpdate功能的SqlServer Merge AddOrUpdate data标签:本文系统...
Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。
可以想象出,需要使用Merge的场景比如: 数据...
本文系统来源:SQL Server - 使用 Merge 语句实现表数据之间的对比同步
简介
Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。
可以想象出,需要使用Merge的场景比如...
CREATE TABLE tTable(id INT ,f1 VARCHAR(10) ,f2 VARCHAR(10) ,f3 VARCHAR(10))
GO
INSERT INTO tTableSELECT 11 ,12 , 13 , 14
INSERT INTO tTableSELECT 13 ,24 ,25,26GOCREATE TABLE tTable2(id INT ,f5 VARCHAR(10) ,f6 VARCHAR(10))
GOCREATE PROC MERGETest
ASBEGINMERGE INTO tTable2 T1USING( SELECT id ,f3 ,f2 FROM tTable )T2 ON ( T1.id = T2.id )WHEN MATCHED THEN UPDATE SET T1.f5 = T2.f2 ,T1.f6 = T...
using T1 --源表
on T1.id=T2.id --匹配条件
when matched then --匹配 update set [name]=T1.[name]when not matched then --不匹配 insert values(id,[name]);
执行结果: T2 表结果为: SQLServer2008中的Merge标签:upd server creat nbsp div class create ima log 本文系统来源:https://www.cnblogs.com/yaoweijun/p/8310268.html
target 表有一些 source表不存在的行。这种情况下,需要从 target 表中删除行。
source 表的某些行具有与 target 表中的行相同的键。但是,这些行在非键列中具有不同的值。这种情况下,需要使用来自 source 表中的值更新 target 表中的行。下图,说明了 source 表和 target 表 的一些操作:插入,更新,删除:如果单独使用 INSERT, UPDATE和DELETE语句,则需要三个单独的语句,来使 source 表中的匹配行的数据更新到 target表。
但...
SQL Server 2008 开始支持 MERGE语句
-- 源表
CREATE TABLE test_from (id INT, val VARCHAR(20));
-- 目标表
CREATE TABLE test_to (id INT, val VARCHAR(20));
-- 插入源表
INSERT INTO test_from VALUES (1, ‘A‘);
INSERT INTO test_from VALUES (2, ‘B‘);
-- 合并 源表到目标表
MERGE test_to USING test_from
ON ( test_to.id = test_from.id ) -- 条件是 id 相同
WHEN MATCHED THEN UPDATE SET test_to.val ...
select ear_code,sta_code,sta_pwd,sta_name,sta_dpt_code,job_code,sta_join_date,sta_sex,sta_status from ITSV123.his000.dbo.os_staff) AS s ON (t.ear_code = s.ear_code and t.sta_code = s.sta_code and t.sta_name != s.sta_name)WHEN MATCHED THENupdate set t.sta_name = s.sta_name;WHEN NOT MATCHED THENinsert values(s.ear_code,s.sta_code,s.sta_pwd,s.sta_name,s.sta_dpt_code,s.job_code,s.sta_join_date,s.sta_s...