假设您在SQL Server中编写了一个有条件地调用自身的函数.如果你从头开始编写函数,完成它,并尝试创建它,SQL Server抱怨.
抱怨是您从函数调用的函数不存在.当然不是,它是递归的!
要实际使其工作,您必须注释掉递归调用,创建函数,取消注释调用,以及更改函数.如果你改变了函数接受的参数,你必须经历这个废话(在这种情况下,它会抱怨新的递归调用中的参数太多或太少).
有没有办法解决?
对于存储过程,您应该收到这样的错误,您可以忽略:
无法为当前对象的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