SQL Server 2005 T-SQL学习笔记:APPLY

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

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


 

 示例:

 

SQL Server 2005 T-SQL学习笔记:APPLY USE AdventureWorks
SQL Server 2005 T-SQL学习笔记:APPLY 
GO
SQL Server 2005 T-SQL学习笔记:APPLY--
Returning a TABLE
SQL Server 2005 T-SQL学习笔记:APPLYCREATE
  FUNCTION  fn_getcustomerorders( @CustomerID   int @TopRecords   bigint)
SQL Server 2005 T-SQL学习笔记:APPLY
RETURNS   TABLE
SQL Server 2005 T-SQL学习笔记:APPLY AS
  RETURN
SQL Server 2005 T-SQL学习笔记:APPLY  SELECT
  TOP  ( @TopRecords *
SQL Server 2005 T-SQL学习笔记:APPLY  
FROM Sales.SalesOrderHeader
SQL Server 2005 T-SQL学习笔记:APPLY  
WHERE  CustomerID  =   @CustomerID
SQL Server 2005 T-SQL学习笔记:APPLY  ORDER
  BY  OrderDate  DESC
SQL Server 2005 T-SQL学习笔记:APPLY
SQL Server 2005 T-SQL学习笔记:APPLY
SQL Server 2005 T-SQL学习笔记:APPLY--
 Executing query with APPLY
SQL Server 2005 T-SQL学习笔记:APPLYSELECT
  *   FROM Sales.Customer cust
SQL Server 2005 T-SQL学习笔记:APPLY
CROSS  APPLY fn_getcustomerorders(cust.CustomerID,  647)
SQL Server 2005 T-SQL学习笔记:APPLY

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

你可能感兴趣的:(sql server 2005)