使用MERGE命令同步数据
来源:互联网 发布:foobar2000音质优化版 编辑:程序博客网 时间:2024/05/22 14:25
实际使用MERGE命令:
插入第一天的销售情况:
MERGE Sales.MonthlyRollup AS smrUSING( SELECT soh.OrderDate, sod.ProductID, SUM(sod.OrderQty) AS QtySold FROM Sales.SalesOrderHeader soh JOIN Sales.SalesOrderDetail sod ON soh.SalesOrderID = sod.SalesOrderID WHERE soh.OrderDate >= '2007-08-01' AND soh.OrderDate < '2007-08-02' GROUP BY soh.OrderDate, sod.ProductID) AS sON (s.ProductID = smr.ProductID)WHEN MATCHED THEN UPDATE SET smr.QtySold = smr.QtySold + s.QtySoldWHEN NOT MATCHED THEN INSERT (Year, Month, ProductID, QtySold) VALUES (DATEPART(yy, s.OrderDate), DATEPART(m, s.OrderDate), s.ProductID, s.QtySold);
第二天的结果更新:
MERGE Sales.MonthlyRollup AS smrUSING( SELECT soh.OrderDate, sod.ProductID, SUM(sod.OrderQty) AS QtySold FROM Sales.SalesOrderHeader soh JOIN Sales.SalesOrderDetail sod ON soh.SalesOrderID = sod.SalesOrderID WHERE soh.OrderDate >= '2007-08-02' AND soh.OrderDate < '2007-08-03' GROUP BY soh.OrderDate, sod.ProductID) AS sON (s.ProductID = smr.ProductID)WHEN MATCHED THEN UPDATE SET smr.QtySold = smr.QtySold + s.QtySoldWHEN NOT MATCHED THEN INSERT (Year, Month, ProductID, QtySold) VALUES (DATEPART(yy, s.OrderDate), DATEPART(m, s.OrderDate), s.ProductID, s.QtySold);
BY TARGE和BY SOURCE:
NOT MATCHED [BY TARGET]:这通常对应根据源表中的数据将行插入到表中的场景。
MATCHED [BY TARGET]: 这暗示了行已经存在于目标表上,因此很有可能对目标表的行执行更新操作。
NOT MATCHED BY SOURCE:这通常用于处理源表中缺少的行,在这种场景下,通常将删除目标表中的行。
使用OUTPUT子句手机受影响的行:
$action:只用于MERGE。返回INSERTED、UPDATED或DELETED,表明对特定的行执行的操作。
inserted:用于MERGE、INSERT或UPDATE。对内部工作表的引用,该工作表包含了为给定行插入的数据的引用。注意,这包括了已更新数据的当前值。
deleted: 用于MERGE、DELETE或UPDATE。对内部工作表的引用,该工作表包含了从给定行中删除的数据的引用。注意,这包括来了已更新数据之前的值。
截断MonthlyRollup表,清空表中的所有数据:
TRUNCATE TABLE Sales.MonthlyRollup;
第一次执行执行MERGE语句包括OUTPUT子句:
</pre><pre class="sql" name="code">MERGE Sales.MonthlyRollup AS smrUSING( SELECT soh.OrderDate, sod.ProductID, SUM(sod.OrderQty) AS QtySold FROM Sales.SalesOrderHeader soh JOIN Sales.SalesOrderDetail sod ON soh.SalesOrderID = sod.SalesOrderID WHERE soh.OrderDate >= '2007-08-01' AND soh.OrderDate < '2007-08-02' GROUP BY soh.OrderDate, sod.ProductID) AS sON (s.ProductID = smr.ProductID)WHEN MATCHED THEN UPDATE SET smr.QtySold = smr.QtySold + s.QtySoldWHEN NOT MATCHED THEN INSERT (Year, Month, ProductID, QtySold) VALUES (DATEPART(yy, s.OrderDate), DATEPART(m, s.OrderDate), s.ProductID, s.QtySold)OUTPUT $action, inserted.Year, inserted.Month, inserted.ProductID, inserted.QtySold, deleted.Year, deleted.Month, deleted.ProductID, deleted.QtySold;
第二次执行:
MERGE Sales.MonthlyRollup AS smrUSING( SELECT soh.OrderDate, sod.ProductID, SUM(sod.OrderQty) AS QtySold FROM Sales.SalesOrderHeader soh JOIN Sales.SalesOrderDetail sod ON soh.SalesOrderID = sod.SalesOrderID WHERE soh.OrderDate >= '2007-08-02' AND soh.OrderDate < '2007-08-03' GROUP BY soh.OrderDate, sod.ProductID) AS sON (s.ProductID = smr.ProductID)WHEN MATCHED THEN UPDATE SET smr.QtySold = smr.QtySold + s.QtySoldWHEN NOT MATCHED THEN INSERT (Year, Month, ProductID, QtySold) VALUES (DATEPART(yy, s.OrderDate), DATEPART(m, s.OrderDate), s.ProductID, s.QtySold)OUTPUT $action, inserted.Year, inserted.Month, inserted.ProductID, inserted.QtySold, deleted.Year, deleted.Month, deleted.ProductID, deleted.QtySold;
0 0
- 使用MERGE命令同步数据
- merge同步更新数据
- 使用rsync命令同步数据
- 使用rsync命令同步数据
- 使用rsync命令同步数据
- 使用rsync命令同步数据
- 使用MERGE语句同步表
- svn merge 命令使用
- JOB+MERGE 跨服务器同步数据
- oracle表数据同步 merge语法
- 使用merge 加 dblink 实现内网中的两个数据同步
- SQL Server-使用Merge语句实现表数据之间的对比同步
- 使用mongodb的findAndModify命令来进行数据同步
- rsync同步命令使用
- rsync ssh数据同步命令
- SQL 利用merge 同步数据库之间表的数据
- 使用Kettle同步数据
- 使用SVN同步数据
- 对request,session,application作用域形象理解
- Some questions about RT-preempt
- js 把一个函数赋给一个变量时带括号与不带括号的区别
- jstack对线程信息的分析
- A - Theatre Square
- 使用MERGE命令同步数据
- 我所理解的Cocos2d-x Cocos2d-x 内存管理机制
- 简述Java命令行参数、JVM、打包Java程序、JAR文件
- 筛法求素数
- 【理解JVM】 深入分析Java ClassLoader原理
- cannot open shared object file: No such file or director解决方案
- nodejs--fs模块
- Jquery 事件冒泡的介绍以及如何阻止事件冒泡
- Fat Models