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


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

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

     
    ALTER FUNCTION testGetSubNodes
    (
        @nodeId int
    )
    RETURNS @t TABLE 
    (
        id bigint identity(1,1) not null, 
        nodeIds int,
        nodeName varchar(500)
    )
    AS
    BEGIN
        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

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

  • 相关阅读:
    Linux:看门狗watchdog.sh程序编写示例
    通用linux程序看门狗(watchdog)python版
    Linux看门狗脚本 1.4
    Qt 6中的输入事件
    使用Qt5Compat库从Qt 5移植到Qt 6
    vertical-align(mozilla的在线帮助)
    css文字如何垂直居中?
    JS-apply 、call 以及 bind
    敢放手把事情给别人做
    页面----调用本地程序
  • 原文地址:https://www.cnblogs.com/eric-qin/p/4057340.html
Copyright © 2020-2023  润新知