代码之家  ›  专栏  ›  技术社区  ›  colithium

SQL函数和递归

  •  3
  • colithium  · 技术社区  · 17 年前

    假设您在SQL Server中编写了一个有条件地调用自身的函数。如果您从头开始编写函数,请完成它并尝试创建它,SQL Server会抱怨。

    抱怨是你从函数中调用的函数不存在。当然不是,它是递归的!

    有什么办法吗?

    1 回复  |  直到 17 年前
        1
  •  5
  •   JohnFx    17 年前

    对于存储过程,您应该得到这样的错误,您可以忽略它:

    缺少对象“sub_proc1”。

    对于用户定义的函数,这有点棘手,但如果你在递归调用中完全限定函数名,它就可以工作(至少在SQL 2k8上对我来说是这样)。

    CREATE FUNCTION recursiveUDF () RETURNS int
    AS
    BEGIN
    
        DECLARE @X int
    
         --Fails with "recursiveUDF is not a recognized built-in function name."
        SET @X = recursiveUDF()          
    
         --works!
        SET @X = dbo.recursiveUDF()  
    
        RETURN 1
    END