2009-02-12 76 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