Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1241979
  • 博文数量: 510
  • 博客积分: 20296
  • 博客等级: 上将
  • 技术积分: 4680
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-30 03:58
文章存档

2011年(13)

2010年(92)

2009年(242)

2008年(163)

我的朋友

分类: 数据库开发技术

2010-08-21 13:54:09


概念:使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。

APPLY 有两种形式: CROSS APPLY 和 OUTER APPLY。CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL的列集,后跟右输入返回的列的列表。


 

 示例:

 

USE AdventureWorks
 
GO
--
Returning a TABLE
CREATE
 FUNCTION fn_getcustomerorders(@CustomerID int@TopRecords bigint)
RETURNS TABLE
 AS
 RETURN
  SELECT
 TOP (@TopRecords*
  
FROM Sales.SalesOrderHeader
  
WHERE CustomerID = @CustomerID
  ORDER
 BY OrderDate DESC


--
 Executing query with APPLY
SELECT
 * FROM Sales.Customer cust
CROSS APPLY fn_getcustomerorders(cust.CustomerID, 647)

没有OrderHeader的客户,表函数将返回NULL

阅读(574) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~