2009-02-12 79 views
3

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

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

要真正实现它,您必须注释掉递归调用,创建函数,取消注释调用以及更改函数。如果您更改了函数接受的参数(在这种情况下,它会抱怨新递归调用中的参数太多或太少),您必须经历这些废话。

有没有办法解决这个问题?

+0

尽管有措辞,但我认为这只是一个问题,并带有两个同样问题导致的问题。 – JohnFx 2009-02-12 21:24:02

+0

他们是有关联的,因为他们同时惹恼我。我想我会分裂他们。 – colithium 2009-02-12 21:52:46

回答

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