博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL表值函数和标量值函数的区别
阅读量:4621 次
发布时间:2019-06-09

本文共 1155 字,大约阅读时间需要 3 分钟。

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

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

ALTER FUNCTION testGetSubNodes(    @nodeId int)RETURNS @t TABLE (    id bigint identity(1,1) not null,     nodeIds int,    nodeName varchar(500))ASBEGIN    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 intASBEGIN    declare @nodeCount int    select @nodeCount=5 from MenuTree    return @nodeCountEND

这个函数很简单返回一个整型值,然后就可以在存储过程中调用了,不过调用的方式有所不同,象上面的表值函数调用是不需要所有者的,只要写函数名称就可以,对于标量值函数来说,是需要加上所有者的,比如所有者是dboselect dbo.testGetSubNodes_,这样就可以返回5,如果不加dbo,那sql会不认识这个函数。

转载于:https://www.cnblogs.com/eric-qin/p/4057340.html

你可能感兴趣的文章
Java中数据类型的转换
查看>>
闲扯一篇 聊聊与博客园代码改变世界的那些事
查看>>
237. Delete Node in a Linked List
查看>>
【口胡】简谈福建省夏令营
查看>>
wince 位图的使用
查看>>
WCF 配置说明
查看>>
Design Patterns Addendum
查看>>
List of FTP Sever/Client Software
查看>>
IDEA 14快捷键
查看>>
浅谈SQL Server中的三种物理连接操作
查看>>
基于linux-2.6.35的class_create(),device_create解析
查看>>
docker学习笔记二
查看>>
POJ 2385 Apple Catching
查看>>
JS 之表单特殊控制
查看>>
Lua循环结构while循环、repeat 循环、for循环_学习笔记03
查看>>
[Leetcode] rotate image 旋转图片
查看>>
数据备份的OSS接口
查看>>
列表选择Spinner
查看>>
2015 eclipse-luna 中maven仓库地址更改
查看>>
Java 之变量和常量(2)
查看>>