T-SQL CROSS APPLY、MERGE
2015-08-13 13:24
169 查看
写在前面
刚才看项目里一个存储过程,也是好长时间没有使用Sql Server2008了,好多写法和函数感觉到陌生,这就遇到了CROSS APPLY 和MERGE的语法,两者之前完全没接触过。 所以专门查了下SQL Server2008实战。1、CROSS APPLY
从教程和数据查询结果来看CROSS APPLY完全是属于语法糖,下面是我基于AdventrueWorkR2查询的,使用了CROSS APPLY和INNER JOIN两种方式。USE [AdventureWorks2008R2] GO /****** Object: UserDefinedFunction [dbo].[fn_WorkOrderRouting] Script Date: 08/13/2015 13:16:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[fn_WorkOrderRouting] (@WorkOrderID int) RETURNS TABLE AS RETURN SELECT a.WorkOrderID,a.ProductID,a.OperationSequence,a.LocationID FROM Production.WorkOrderRouting a WHERE a.WorkOrderID=@WorkOrderID
select w.WorkOrderID,w.OrderQty,r.ProductID,r.OperationSequence from Production.WorkOrder w CROSS APPLY dbo.fn_WorkOrderRouting(w.WorkOrderID) as r ORDER BY w.WorkOrderID,w.OrderQty,r.ProductID
SELECT a.WorkOrderID,a.OrderQty,b.ProductID,b.OperationSequence FROM Production.WorkOrder a INNER JOIN Production.WorkOrderRouting b on a.WorkOrderID= b.WorkOrderID ORDER BY a.WorkOrderID,a.OrderQty,b.ProductID
2、MERGE
merge简单来说是针对插入、更新、删除三个操作的合并,根据与源表联结的结果,对目标表进行插入、更新、删除。 我们经常用的场景也就是主从表同步,或者是主表和历史表的同步和维护。 下面代码片段是我在网上看到的一段:--创建一个临时的订单表 CREATE TABLE Orders(OrderID INT,CustomerID NCHAR(5)) GO --往这个表中添加两行记录 INSERT INTO Orders VALUES(1,N'AAAAA') INSERT INTO Orders VALUES(2,N'BBBBB') GO --通过生成表查询,产生另外一个架构一模一样的表,但只是复制了第一行数据过去 SELECT * INTO Orders2 FROM Orders WHERE OrderID=1 GO --将第二个表的数据进行更新 UPDATE orders2 SET CustomerID=N'DDDDD' --合并两个表 MERGE Orders o USING Orders2 o2 ON o2.OrderID=o.OrderID WHEN MATCHED THEN UPDATE SET O.CustomerID=o2.CustomerID--如果匹配到了,就更新掉目标表 WHEN NOT MATCHED THEN INSERT VALUES(o2.OrderID,o2.CustomerID)--如果匹配不到,就插入 WHEN NOT MATCHED BY SOURCE THEN DELETE;--如果来源表无法匹配到,就删除
相关文章推荐
- iOS利用Runtime自定义控制器POP手势动画(经典)
- Android如何快速打出100个渠道apk
- 【百度网盘】老罗android开发视频教程[压缩后3.63G]
- 内嵌网页QwebView
- 读书笔记--Android多线程
- 【VR】Leap Motion 官网文档 LeapUnityExtensions (LeapUnity扩展)
- Android Studio 使用 Gradle 打包 Jar
- Android Studio 使用 Gradle 打包 Jar
- android ndk入门学习
- iOS 之GCD串行和并发队列的理解
- iOS学习过程中遇到的一些有用的小功能(8/13更新)
- 国内App推广终极37个方法
- android Graphics(四):canvas变换与操作
- Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)
- 【Android】Merge讲解与实例
- android Graphics(三):区域(Range)
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图 .
- iostream.h和iostream 区别
- 微信内置浏览器submit函数无效的问题
- android与C# WebService基于ksoap通信(Android篇)