SQL Server 2005学习总结:APPLY 运算符(二)

日期: 2008-08-20 作者:aierong 来源:TechTarget中国 英文

  开始使用APPLY 运算符:


     select m.ids, f.*
     FROM MyData m CROSS APPLY fun_MyData(data) f
     go



  –结果


  ids id value


  2 1 a


  2 2 b


  2 3 c


  3 1 q


  4 1 i


  4 2 p


    





 select m.ids, f.* 
     FROM MyData m OUTER APPLY fun_MyData(data) f 
     g o 

  –结果


  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版本 







declare @ids int 
  select @ids =0 
  declare @data nvarchar(200) 
  select @data=’’ 
  –定义表变量临时存放数据 
  declare @tem table( 
  ids int, 
  id int, 
  value nvarchar(100) 
  ) 
  DECLARE test_cursor CURSOR FOR 
  select ids, Data FROM MyData 
  OPEN test_cursor 
  FETCH NEXT FROM test_cursor 
  INTO @ids,@data 
  WHILE @@FETCH_STATUS = 0 
  begin 
  insert into @tem 
  select @ids,id,value 
  from dbo.fun_MyData(@data) 
  FETCH NEXT FROM test_cursor 
  INTO @ids,@data 
  end 
  CLOSE test_cursor 
  DEALLOCATE test_cursor 
  select * from @tem 



  同样得到了结果,但是sql2000要利用循环,这样代码复杂,计算耗时。


  让我们充分利用Sql Server2005新兵器:APPLY运算符给我们带来的简便快捷的运算方式吧.

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

aierong
aierong

相关推荐