拼吾爱程序人生

首页 » 数据库编程 » SQL Server » Sql Server2005 Transact-SQL 学习总结之-APPLY 运算符
cobra - 2008-8-26 13:09:00
APPLY 运算符简介:
APPLY 运算符是Sql Server2005新增加的运算符。

使用APPLY运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。
表值函数作为右输入,外部表表达式作为左输入。
通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。
APPLY运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。
APPLY 运算符的左操作数和右操作数都是表表达式。
这些操作数之间的主要区别是:右操作数可以使用表值函数,从左操作数获取一个列作为函数的参数之一。左操作数可以包括表值函数,但不能以来自右操作数的列作为参数。

演示一下APPLY 运算符的用法:

Code


--查询结果
ids    Data
1   
2    a,b,c
3    q
4    i,p

建立一个表,作用是:按逗号分解字符,分解出的每一个字符做一行数据返回

Code


开始使用APPLY 运算符:

Code


--结果
ids    id    value
2    1    a
2    2    b
2    3    c
3    1    q
4    1    i
4    2    p

Code


--结果
ids    id    value
1    NULL    NULL
2    1    a
2    2    b
2    3    c
3    1    q
4    1    i
4    2    p

我们看到OUTER APPLY返回的结果行比CROSS APPLY多。
这一点有点象inner join(内部联接)和Left Outer Join(左外部联接)之间的关系.
其实APPLY有两种形式:CROSS APPLY 和 OUTER APPLY。
CROSS APPLY仅返回外部表中通过表值函数生成结果集的行。
OUTER APPLY既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。


以上是sql2005的解决方案,下面我演示一下sql2000怎么解决这样的查询:
思路是:做个循环来逐个链接查询。



sql2000版本

Code


同样得到了结果,但是sql2000要利用循环,这样代码复杂,计算耗时。
让我们充分利用Sql Server2005新兵器:APPLY运算符给我们带来的简便快捷的运算方式吧.





(文/aierong  出处/博客园)

 您可能对 [SQL Server] 的这些文章也感兴趣:

SQL Server中的新数据类型:HierarchyId
SQL Server 2008: Installation Center
SQL Server 2008 Feb CTP开放下载
教你如何提高SQL Server 2000 的性能?
SQL Server数据对象结构的动态建立与访问
SQLServerSA权限总结经典技术
设置SQL 2005 express 的远程访问和帐号密码
修复SQLSERVER2000数据库之实战经验
用SQL Server保持会话状态
SQL Server 2005中的SQLCMD工具使用
1
查看完整版本: Sql Server2005 Transact-SQL 学习总结之-APPLY 运算符
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: