3
假设您在SQL Server中编写了一个有条件调用自己的函数。如果您从头开始编写函数,完成它并尝试创建它,SQL Server会抱怨。SQL函数和递归
抱怨是您从函数调用的函数不存在。当然它不是,它是递归的!
要真正实现它,您必须注释掉递归调用,创建函数,取消注释调用以及更改函数。如果您更改了函数接受的参数(在这种情况下,它会抱怨新递归调用中的参数太多或太少),您必须经历这些废话。
有没有办法解决这个问题?
假设您在SQL Server中编写了一个有条件调用自己的函数。如果您从头开始编写函数,完成它并尝试创建它,SQL Server会抱怨。SQL函数和递归
抱怨是您从函数调用的函数不存在。当然它不是,它是递归的!
要真正实现它,您必须注释掉递归调用,创建函数,取消注释调用以及更改函数。如果您更改了函数接受的参数(在这种情况下,它会抱怨新递归调用中的参数太多或太少),您必须经历这些废话。
有没有办法解决这个问题?
对于存储过程,你应该得到这样的错误,你可以忽略:
不能行添加到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
尽管有措辞,但我认为这只是一个问题,并带有两个同样问题导致的问题。 – JohnFx 2009-02-12 21:24:02
他们是有关联的,因为他们同时惹恼我。我想我会分裂他们。 – colithium 2009-02-12 21:52:46