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