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

简介: 原文:SQL表值函数和标量值函数的区别  写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写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会不认识这个函数。
目录
相关文章
|
4月前
|
SQL 数据库
SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示
SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别。以下是它们的用法和示例:
157 0
|
5月前
|
SQL 机器学习/深度学习 自然语言处理
达梦(DM) SQL函数相关
讲述 DM 数据库函数
|
5月前
|
SQL Serverless 数据库
|
1月前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
1月前
|
SQL 存储 Apache
在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
【2月更文挑战第16天】在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
193 2
|
6月前
|
SQL Java 数据库连接
MyBatis之动态SQL、#与$的区别和结果映射
MyBatis之动态SQL、#与$的区别和结果映射
62 0
|
2月前
|
SQL 存储
SQL Server基本函数
SQL Server基本函数
|
2月前
|
SQL 安全 关系型数据库
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
36 0
|
3月前
|
SQL Perl
PL/SQL的函数和包
PL/SQL的函数和包
27 1
|
3月前
|
SQL 关系型数据库 MySQL
五、SQL常用函数
五、SQL常用函数
30 0