现在的位置: 首页 > 综合 > 正文

<转>Merge关键字用法与简例

2012年04月15日 ⁄ 综合 ⁄ 共 1438字 ⁄ 字号 评论关闭

USE tempdb

GO

--创建表A

IF NOT OBJECT_ID('[A]') IS NULL

    DROP TABLE [A]

GO

CREATE TABLE A(ID INT,ACOL VARCHAR(10))

GO

INSERT A VALUES(1,N'A')

INSERT A VALUES(2,N'B')

INSERT A VALUES(3,N'C')

INSERT A VALUES(6,N'X') --此记录在B表中不存在,删除

GO

--创建表B

IF NOT OBJECT_ID('[B]') IS NULL

    DROP TABLE [B]

GO

CREATE TABLE B(ID INT,BCOL VARCHAR(10),XCOL VARCHAR(10))

GO

INSERT B VALUES(1,N'A',N'T')  --1IDAID匹配且指定值与A表指定值对应相同,不变

INSERT B VALUES(2,N'P',N'O')  --2和的IDAID匹配,指定值与A表指定值对应不同,更新

INSERT B VALUES(3,N'P',N'N')

INSERT B VALUES(4,N'L',N'Y')  --4和的IDAID匹配,指定值在A表中对应不存在,插入

INSERT B VALUES(5,N'E',N'S') 

GO

--开始合并两个表:

MERGE A --要处理的表

USING B --参照的表

ON A.ID=B.ID --关联条件

WHEN NOT MATCHED THEN INSERT VALUES(B.ID,B.BCOL) --如果要处理表没有参照表上的记录,则插入

WHEN MATCHED THEN UPDATE SET A.ACOL=B.BCOL --如果记录匹配,就更新目标表的匹配行

WHEN NOT MATCHED BY SOURCE THEN DELETE --如果要处理表的记录在参照表上不存在,则删除

OUTPUT $action, Inserted.*, Deleted.*; --相当于输出以上语句的操作记录

 

/*--result:

$action    ID          ACOL       ID          ACOL

---------- ----------- ---------- ----------- ----------

INSERT     4           L          NULL        NULL

INSERT     5           E          NULL        NULL

UPDATE     1           A          1           A

UPDATE     2           P          2           B

UPDATE     3           P          3           C

DELETE     NULL        NULL       6           X

 

(6 行受影响)

*/

--看看A表更新成什么样:

SELECT * FROM A

/*

ID          ACOL

----------- ----------

1           A

2           P

3           P

4           L

5           E

 

(5 行受影响)

*/

抱歉!评论已关闭.