当前位置:  开发笔记 > 数据库 > 正文

SQL函数和递归

如何解决《SQL函数和递归》经验,为你挑选了1个好方法。

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

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

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

有没有办法解决?



1> JohnFx..:

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

无法为当前对象的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

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有