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

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

[sql] view
plain
copy

  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)就可以返回表中的数据了。再写一个标量值函数

[sql] view
plain
copy

  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会不认识这个函数。

时间: 2024-08-01 03:24:09

SQL表值函数和标量值函数的区别的相关文章

SQLServer 表值函数与标量值函数 定义方式与调用区别

sqlserver 表值函数与标量值函数 定义方式与调用区别 sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量值函数可以返回基类型. 标量值函数创建: create function [dbo].[gooswidth] (     @goodscode varchar(20) ) returns float begin        declare

SQLserver标量值函数使用例子

举个例子,当用户删除一个节点的时候,是需要将当前节点下的所有子节点都删掉,如果程序只传一个当前节点,那就需要写一个函数来得到当前节点下的所有子节点,这些子节点的信息就可以放到一个表中返回.  代码如下 复制代码 ALTER FUNCTION testGetSubNodes ( -- Add the parameters for the function here @nodeId int ) RETURNS @t TABLE ( -- Add the column definitions for

sql server 标量值函数实例与不能调用原因分析

sql server 标量值函数实例与不能调用原因分析 --标量值函数 set ansi_nulls on go set quoted_identifier on go -- ============================================= -- author: <author,,name> -- create date: <create date, ,> -- description: <description, ,> -- ========

【转】SQL Server 的三种自定义函数(用户定义的函数)

原文链接:http://www.cftea.com/c/2007/08/6HLN4P3VBKA1W2EA.asp   "自定义函数"是我们平常的说法,而"用户定义的函数"是 SQL Server 中书面的说法. SQL Server 2000 允许用户创建自定义函数,自定义函数可以有返回值. 自定义函数分为:标量值函数或表值函数 如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数.可以使用多条 Transact-SQL 语句定义标量值函数. 如果 R

LINQ to SQL语句(21)之用户定义函数

用户定义函数 我们可以在LINQ to SQL中使用用户定义函数.只要把 用户定义函数拖到O/R设计器中,LINQ to SQL自动使用FunctionAttribute属性 和ParameterAttribute属性(如果需要)将其函数指定为方法.这时,我们只需 简单调用即可. 在这里注意:使用用户定义函数的时候必须满足以下形 式之一,否则会出现InvalidOperationException异常情况. 具有正确映 射属性的方法调用的函数.这里使用FunctionAttribute属性和 P

在PL/SQL 开发中调试存储过程和函数的一般性方法

存储过程|函数 在PL/SQL 开发中调试存储过程和函数的一般性方法摘要: Oracle 在PLSQL中提供的强大特性使得数据库开发人员可以在数据库端完成功能足够复杂的任务, 本文将结合Oracle提供的相关程序包(package)以及一个非常优秀的第三方开发工具来介绍在PLSQL中开发及调试存储过程的方法,当然也适用于函数. 版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息.原文出处: http://www.aiview.com/notes/ora_using_

SQL中的5种聚集函数

原文:SQL中的5种聚集函数 作为一个刚毕业进入这行的菜鸟,婶婶的觉的那种大神.大牛到底是怎样炼成的啊,我这小菜鸟感觉这TMD要学的东西这多啊,然后就给自己定了许多许多要学习的东西,可是有人又不停地给你灌输:东西不在多而要精通!我也觉得很有道理,可是怎样才能精通呢?封神之路,在哪里啊 !!! 这一天没有一个安静的心,基本是学不进去了,发现自己还是太功利了,急功近利!也许你只要学就行,管他是否能够立即让人见识到你的厉害,技术和知识这种东西也许还是要强调一个 底蕴的.既然自己最烦那种看了两篇文章就给

浅谈mysql_query()函数的返回值问题

问题描述: 我在操作mysql,插入数据时,关闭资源,PHP提示了一个warning.内容大致为,需要给mysql_free_result()一个资源类型. 然后,我将返回的结果var_dump($res),发现是bool值 分析: 看手册时,一眼看上去,觉得mysql_query()函数返回的本来就是资源类型,可是为什么现在又是bool值了呢?好吧,耐心看完手册,才发现,原理是这样的,如下图片: 总结:由上可以知道,mysql_query()执行sql语句时,并不是什么时候都要执行释放结果集,

对象的初始化-用函数的返回值初始化一个类对象,这其中用了几次复制构造函数

问题描述 用函数的返回值初始化一个类对象,这其中用了几次复制构造函数 这是我自己写的一段代码#includeusing namespace std;class Example{int num;public:Example(int i){num=i;cout<<""This is construction with parameter.n"";}Example(){num=0;cout<<""This is construc