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

简介:
     写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量值函数可以返回基类型。
     举个例子,当用户删除一个节点的时候,是需要将当前节点下的所有子节点都删掉,如果程序只传一个当前节点,那就需要写一个函数来得到当前节点下的所有子节点,这些子节点的信息就可以放到一个表中返回。
ALTER FUNCTION testGetSubNodes
(
 -- Add the parameters for the function here
 @nodeId int
)
RETURNS 
 @t TABLE 
(
 -- Add the column definitions for the TABLE variable here
 id bigint identity(1,1) not null, 
 nodeIds int ,
    nodeName varchar(500)
)
AS
BEGIN
 -- Fill the table variable with the rows for your result set
 insert into @t values(@nodeId,'header'); 
    while exists(
   select nodeid from dbo.Tree where parentid
        in (select nodeIds from @t) and nodeid not in(select nodeIds from @t))
    begin
      insert into @t select nodeid, nodename from dbo.Tree where parentid
        in (select nodeIds from @t)
    end
    
 RETURN 
END
 
这个函数的主要功能就是返回当前节点下的所有子节点,在存储过程中写
select * from testGetSubNodes(nodeId)就可以返回表中的数据了。
 
再写一个标量值函数
ALTER FUNCTION [dbo].[testGetSubNodes_]
(
 @nodeId int
)
RETURNS int
AS
BEGIN
    declare @nodeCount int
 select @nodeCount=5 from MenuTree
    return @nodeCount
END
这个函数很简单返回一个整型值,然后就可以在存储过程中调用了,不过调用的方式有所不同,象上面的表值函数调用是不需要所有者的,只要写函数名称就可以,对于标量值函数来说,是需要加上所有者的,比如所有者是dbo
select dbo.testGetSubNodes_,这样就可以返回5,如果不加dbo,那sql会不认识这个函数。


本文转自lidup 51CTO博客,原文链接:http://blog.51cto.com/lidup/160904,如需转载请自行联系原作者

   
相关文章
|
1月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
2月前
|
SQL 数据处理 数据库
|
2月前
|
SQL Oracle 关系型数据库
SQL 中的大小写处理函数详解
【8月更文挑战第31天】
53 0
|
2月前
|
SQL 数据库
|
2月前
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
22 0
|
2月前
|
SQL 存储 关系型数据库
COALESCE 函数:SQL中的空值处理利器
【8月更文挑战第31天】
120 0
|
2月前
|
SQL 关系型数据库 数据处理
|
2月前
|
SQL 数据挖掘
|
2月前
|
SQL Oracle 关系型数据库
NVL() 函数:SQL中的空值处理利器
【8月更文挑战第31天】
158 0
|
2月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
132 0
下一篇
无影云桌面