SQL Server 2005 T-SQL学习笔记:APPLY
2008-06-26 23:57
411 查看
概念:使用 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
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
相关文章推荐
- SQL Server 2005 T-SQL 学习笔记:排名函数
- SQL Server 2005 T-SQL学习笔记:CTE
- SQL Server 2005 T-SQL学习笔记:TOP的增强
- SQL Server 2005 T-SQL学习笔记:PIVOT和UNPIVOT
- SQL Server 2005 T-SQL 学习笔记:新数据类型
- SQL Server 2005 T-SQL学习笔记:CTE
- SQL Server 2005 T-SQL 学习笔记:排名函数
- SQL Server 2005 T-SQL 学习笔记:Try Catch
- SQL Server 2005 T-SQL 学习笔记:Try Catch
- SQL Server 2005 T-SQL 学习笔记:新数据类型
- SQL Server 2005 T-SQL学习笔记:建立动态的PIVOT
- SQL Server 2005 T-SQL学习笔记:PIVOT和UNPIVOT
- SQL Server 2005 T-SQL学习笔记:建立动态的PIVOT
- SQL Server 2005 T-SQL学习笔记:TOP的增强
- SQL Server 全文索引查询T-SQL学习笔记
- <<SQL Server 2005 高级程序设计>> 学习笔记(1)
- 【原创】Microsoft SQL Server 2005技术内幕:T-SQ程序设计 学习笔记
- sql server 2005学习笔记之触发器简介(一)
- <<SQL Server 2005 高级程序设计>> 学习笔记(5)
- SQL SERVER 2005 数据挖掘与商业智能完全解决方案---学习笔记(五)