SqlServer 2008 中Merge的應用

2021-06-04 18:31:04 字數 2355 閱讀 1981

簡介:

sqlserver 2008中新增加了merge這個dml關鍵字,msdn對於merge的解釋:根據與源表聯結的結果,對目標表執行insert,update,delete操作.例如:根據目標表與源表的差異,在目標表中執行執行insert,update,delete操作,實現兩個表的同步.

語法:

mergo into 目標表 as t

using 源表 as s

on 匹配條件

when matched and [其它條件] then

對源表與目標表匹配的項執行的操作

when not matched [其它條件] then 

對源表中存在的,而目標表中不存在的匹配項執行操作

when not matched by source and [其它條件] then

對目標表中存在的,而源表中不存在的匹配項執行操作;

注意事項 1.最後的分號必須有

2.源表可以是乙個具體的表,也可以是乙個子查詢語句

例項:

--建立源表

create table old(id int,des nvarchar(20))

--建立目標表

create table new(id int,des nvarchar(20))

insert into old values(1,'1')

insert into old values(2,'2') --目標表中不存在的將被插入

insert into old values(3,'3')

insert into new values(1,'匹配的將被修改')

insert into new values(5,'源表中不存在的將被刪除')

merge into new as t

using old as s

on t.id=s.id

when matched

then update set t.des=s.des

when not matched

then insert values(s.id,s.des)

when not matched by source

then delete;

此例項實現的目標表和源表的同步.

mergo還乙個強大功能,用output可以對剛才做的改動輸出:

--建立源表

create table old(id int,des nvarchar(20))

--建立目標表

create table new(id int,des nvarchar(20))

insert into old values(1,'1')

insert into old values(2,'2') --目標表中不存在的將被插入

insert into old values(3,'3')

insert into new values(1,'匹配的將被修改')

insert into new values(5,'源表中不存在的將被刪除')

merge into new as t

using old as s

on t.id=s.id

when matched

then update set t.des=s.des

when not matched

then insert values(s.id,s.des)

when not matched by source

then delete;

output $action as [action],inserted.id as 插入修改的id,inserted.des as 插入修改的des,

deleted.id as 修改刪除的id,deleted.des as 修改刪除的des;

缺點:

使用merge只能更新操作乙個目標表

源表中不能有重複的記錄源表和目標表必須在同乙個資料庫中

小結:

sql server 2008中

merge關鍵字的加入使得表同步有乙個好的解決方案,但mergo的功能並不侷限於此!

Sql Server 2008 中Merge的用法

本文摘自其它 sql server 2008中的merge語句能做很多事情,它的功能是根據源表對目標表執行插入 更新或刪除操作。最典型的應用就是進行兩個表的同步。下面通過乙個簡單示例來演示merge語句的使用方法,假設資料庫中有兩個表product及productnew,我們的任務是將product...

SQL Server 2008中SQL增強功能點

在sql server 2008中新增功能,可以使用單個insert命令插入多行 舉例 create table dbo test2 編號 int null,姓名 varchar 20 null,一季度 int null,二季度 int null,三季度 int null,四季度 int null ...

SQL Server 2008中SQL增強功能點

在sql server 2008中新增功能,可以使用單個insert命令插入多行 舉例 create table dbo test2 編號 int null,姓名 varchar 20 null,一季度 int null,二季度 int null,三季度 int null,四季度 int null ...