SQL函数和递归

col*_*ium 3 recursion sql-server-2005

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

抱怨是您从函数调用的函数不存在.当然不是,它是递归的!

要实际使其工作,您必须注释掉递归调用,创建函数,取消注释调用,以及更改函数.如果你改变了函数接受的参数,你必须经历这个废话(在这种情况下,它会抱怨新的递归调用中的参数太多或太少).

有没有办法解决?

Joh*_*nFx 5

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

无法为当前对象的sysdepends添加行,因为它取决于缺少的对象"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
Run Code Online (Sandbox Code Playgroud)