SQL表值函数和标量值函数的区别

系统 1968 0
原文: SQL表值函数和标量值函数的区别

  写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量值函数可以返回基类型。举个例子,当用户删除一个节点的时候,是需要将当前节点下的所有子节点都删掉,如果程序只传一个当前节点,那就需要写一个函数来得到当前节点下的所有子节点,这些子节点的信息就可以放到一个表中返回。

  1.      
  2. ALTER   FUNCTION   testGetSubNodes   
  3.  
  4.         @nodeId  int    
  5.  
  6. RETURNS   @t  TABLE      
  7.  
  8.         id  bigint   identity(1,1)  not   null    
  9.         nodeIds  int  
  10.         nodeName  varchar (500)   
  11.  
  12. AS    
  13. BEGIN    
  14.         insert   into   @t  values (@nodeId, 'header' );     
  15.         while  exists( select   nodeid  from   dbo.Tree  where   parentid  in   ( select   nodeIds  from   @t)  and   nodeid  not   in ( select   nodeIds  from   @t))   
  16.         begin    
  17.                 insert   into   @t  select   nodeid,  nodename  from   dbo.Tree  where   parentid  in   ( select   nodeIds  from   @t)   
  18.         end      
  19.         RETURN      
  20. END    
        这个函数的主要功能就是返回当前节点下的所有子节点,在存储过程中写select * from testGetSubNodes(nodeId)就可以返回表中的数据了。再写一个标量值函数
  1.   ALTER   FUNCTION   [dbo].[testGetSubNodes_]   
  2.  
  3.         @nodeId  int    
  4.  
  5. RETURNS   int    
  6. AS    
  7. BEGIN    
  8.         declare   @nodeCount  int    
  9.         select   @nodeCount=5  from   MenuTree   
  10.         return   @nodeCount   
  11. END    
        这个函数很简单返回一个整型值,然后就可以在存储过程中调用了,不过调用的方式有所不同,象上面的表值函数调用是不需要所有者的,只要写函数名称就可以,对于标量值函数来说,是需要加上所有者的,比如所有者是dboselect dbo.testGetSubNodes_,这样就可以返回5,如果不加dbo,那sql会不认识这个函数。

SQL表值函数和标量值函数的区别


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论