电脑安全

您当前的位置:主页 > 电脑安全 >

MSSQL Server 2008中的MERGE(不仅仅是合并)-网络编程

来源:[db:来源]标题:   语句    编辑:电脑技术全能网 时间:2019-09-18 12:29

原标题:MSSQL Server 2008中的MERGE(不仅仅是合并)-网络编程
   中心提醒:就像题目浮现的一样,SQL Server 2008中的MERGE语句能做许多事件  就像题目浮现的一样,SQL Server 2008中的MERGE语句能做许多事件,它的功效是依据源表对目的表履行拔出、更新或删除操纵。最典范的利用就是停止两个表的同步。  上面经过一个简略示例来演示MERGE语句的应用方式,假定数据库中有两个表Product及ProductNew,咱们的义务是将Product的数据同步到ProductNew(固然同步能够是天天经过Job来主动实现的,在此咱们只存眷MERGE的应用)。  以下SQL创立示例表:  --源表   CREATE TABLE Product   (   ProductID varchar(7) NOT NULL PRIMARY KEY,   ProductName varchar(100) NOT NULL,   Price decimal(13,2) DEFAULT 0   );  INSERT INTO Product   Values   ('4100037','优盘',50),   ('4100038','鼠标',30);  --目的表   CREATE TABLE ProductNew   (   ProductID varchar(7) NOT NULL PRIMARY KEY,   ProductName varchar(100) NOT NULL,   Price decimal(13,2) DEFAULT 0   );    上面再来存眷MERGE语句的基础语法:  MERGE 目的表  USING 源表  ON 婚配前提  WHEN MATCHED THEN  语句  WHEN NOT MATCHED THEN  语句;    以上是MERGE的最最基础的语法,语句履行时依据婚配前提的成果,假如在目的表中找到婚配记载则履行WHEN MATCHED THEN前面的语句,假如没有找到婚配记载则履行WHEN NOT MATCHED THEN前面的语句。留神源表能够是表,也能够是一个子查问语句。  分外夸大一点,MERGE语句最初的分号是不能省略的!  回到咱们的示例,明显Product与ProductNew表的MERGE婚配前提为主键ProductID字段,初始情形下,ProductNew表为空,此时确定履行的是WHEN NOT MATCHED THEN后的语句,咱们先只斟酌源表递增的情形,MERGE语句以下:  MERGE ProductNew AS d   USING   Product   AS s   ON s.ProductID = d.ProductId   WHEN NOT MATCHED THEN   INSERT( ProductID,ProductName,Price)   VALUES(s.ProductID,s.ProductName,s.Price);    运转后2行受影响,咱们曾经将Product表的数据同步到了ProductNew表。  当初,咱们更新Product表4100037产物的价钱,将其修正为55:  UPDATE Product SET Price=55 WHERE ProductID='4100037';    咱们也盼望天天同步的时间应当将更新后的价钱同步到ProductNew表,明显此时在MERGE语句中应当增加WHEN MATCHED THEN 语句,该语句来更新ProductNew表的价钱,增加婚配更新后的MERGE语句:  MERGE ProductNew AS d   USING   Product   AS s   ON s.ProductID = d.ProductId   WHEN NOT MATCHED THEN   INSERT( ProductID,ProductName,Price)   VALUES(s.ProductID,s.ProductName,s.Price)   WHEN MATCHED THEN   UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;    履行后2行受影响,为甚么是两行呢?由于咱们的婚配前提只是按ProductID来关系的,如许婚配进去的记载为2行。别的,咱们的UPDATE语句外面没有更新ProductID字段,由于这是完整没须要的(假如修正了ProductID字段会间接走到NOT MATCHED)。  当初做个损坏,咱们将410037产物删撤除:  DELETE Product WHERE ProductID='4100037';    显明,下面给出的MERGE语句无奈同步这类情形,再次回到MERGE语句的界说,对MERGE的WHEN NOT MATCHED THEN语句稍作扩大:  WHEN NOT MATCHED BY TARGET     表现目的表不婚配,BY TARGET是默许的,以是下面咱们间接应用WHEN NOT MATCHED THEN  WHEN NOT MATCHED BY SOURCE     表现源表不婚配,即目的表中存在,源表中不存在的情形。  当初咱们要实现源表DELETE后,目的表的同步举措,MERGE语句以下:  MERGE ProductNew AS d   USING   Product   AS s   ON s.ProductID = d.ProductId   WHEN NOT MATCHED BY TARGET THEN   INSERT( ProductID,ProductName,Price)   VALUES(s.ProductID,s.ProductName,s.Price)   WHEN NOT MATCHED BY SOURCE THEN   DELETE   WHEN MATCHED THEN   UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;    下面曾经应用到MERGE语句中的INSERT、UPDATE、DELETE语句,这充足实现大少数的同步功效了。固然,MERGE语句另有许多的选项,在此不做胪陈,请参考MSDN.

上一篇:VS2017使用作业视图的方法-网络编程

下一篇:没有了