MERGE

摘要:
Merge关键字是一个神奇的DML关键字。它是在SQL Server 2008中引入的。它可以将插入、更新和删除合并到一个句子中。MSDN对合并的解释非常简洁:“根据与源表的连接结果插入、更新或删除目标表。”。,从这个描述中,我们可以看到Merge是关于对两个表之间的数据进行操作的。

 Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。

    可以想象出,需要使用Merge的场景比如:

  •     数据同步
  •     数据转换
  •     基于源表对目标表做Insert,Update,Delete操作


CREATE
TABLE TargetTable ( StudentID NVARCHAR(20), StudentName NVARCHAR(20), StudentScore INT, Remark NVARCHAR(20), InsertTime DATETIME, UpdateTime DATETIME ) CREATE TABLE SourceTable ( StudentID NVARCHAR(20), StudentName NVARCHAR(20), StudentScore INT, Remark NVARCHAR(20), InsertTime DATETIME, UpdateTime DATETIME ) INSERT INTO TargetTable SELECT '1001','张三',45,'数学',dateadd(DD,2,GETDATE()),dateadd(hh,8,GETDATE()) INSERT INTO TargetTable SELECT '1002','李四',75,'英语',dateadd(DD,2,GETDATE()),dateadd(hh,8,GETDATE()) --INSERT INTO TargetTable SELECT '1003','王五',95,'化学',dateadd(hh,2,GETDATE()),dateadd(hh,2,GETDATE()) INSERT INTO SourceTable SELECT '1001','张三',77,'数学',dateadd(DD,2,GETDATE()),dateadd(hh,8,GETDATE()) INSERT INTO SourceTable SELECT '1002','李四',75,'英语',dateadd(DD,2,GETDATE()),dateadd(hh,8,GETDATE()) INSERT INTO SourceTable SELECT '1004','赵柳',97,'数学',dateadd(DD,2,GETDATE()),dateadd(hh,8,GETDATE()) SELECT * FROM TargetTable SELECT * FROM SourceTable ;MERGE TargetTable AS tt USING SourceTable AS st ON tt.StudentID = st.StudentID AND tt.Remark = st.Remark WHEN MATCHED THEN UPDATE SET StudentScore = st.StudentScore,UpdateTime = '2016-01-11 17:59:15' WHEN NOT MATCHED THEN INSERT (StudentID,StudentName,StudentScore,Remark,InsertTime,UpdateTime) VALUES (StudentID,StudentName,StudentScore,Remark,InsertTime,GETDATE()); SELECT * FROM TargetTable SELECT * FROM SourceTable

免责声明:文章转载自《MERGE》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Django使用MySql数据库JS+CSS仿新浪微博首页“大家正在说”渐入轮显效果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数据字典的应用实例

要熟悉一个全新的oracle数据库系统的结构并准备出详细的oracle结构文档的步骤思路如下: 1、得到现有的oracle的数据库的名字、创建日期等信息v$database select name,created,log_mode,open_mode from v$database; 获得数据库的日志运行状态(归档/非归档)和运行模式(可读可写) 2、获得...

(转)SQLServer查询数据库各种历史记录

原文地址https://www.cnblogs.com/seusoftware/p/4826958.html 在SQL Server数据库中,从登陆开始,然后做了什么操作,以及数据库里发生了什么,大多都是有记录可循的,但是也有一些确实无从查起。 一. 数据库启动记录 1. 最近一次启动SQL Server的时间 select sqlserver_sta...

最高优先级

最高优先级 #include<stdio.h> #include<stdlib.h> #include<string.h> #define Max 100 typedef struct pcb {     char name[Max];  //进程名     int priority;    //优先级     int...

Hive中的排序语法

ORDER BY hive中的ORDER BY语句和关系数据库中的sql语法相似。他会对查询结果做全局排序,这意味着所有的数据会传送到一个Reduce任务上,这样会导致在大数量的情况下,花费大量时间。 与数据库中 ORDER BY 的区别在于在hive.mapred.mode = strict模式下,必须指定 limit 否则执行会报错。 hive>...

mysql如何解除死锁状态

第一种: 前提条件:找到执行非常慢的sql; 如何找呢:还原客户遇到的问题场景,从控制台找到所执行的sql,一句句的去执行,直到找到执行非常慢的sql 1.查询是否锁表 show OPEN TABLES where In_use > 0; 2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程) show proces...

Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)

我们用实例来说明这一部分表结构现在有客户表、订单表、图书表、作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       customer_id   book_id) 图书表                    (id  book_name       au...