ALTER PROCEDURE dbo.CurePeriod
@curDate_p1 datetime
-- call
exec CurePeriod @curDateTrick
我可以在存儲過程中調用自己嗎? 它的權利?多謝。調用存儲過程本身sql
ALTER PROCEDURE dbo.CurePeriod
@curDate_p1 datetime
-- call
exec CurePeriod @curDateTrick
我可以在存儲過程中調用自己嗎? 它的權利?多謝。調用存儲過程本身sql
許多DBMS支持遞歸,原則上它的實現與您寫的非常相似。
在你的榜樣,需要退出條件避免遞歸的無限深度,所以你應該有類似以下內容:
:
:
exec CurePeriod (@curDateTrick , 1) ;
:
:
:
CREATE PROCEDURE dbo.CurePeriod (@curDate_p1 datetime , @OtherParam INT)
AS
BEGIN
IF @OtherParam < 10 THEN
exec CurePeriod (@curDateTrick , @OtherParam + 1) ;
END IF ;
END ;
在你的代碼
和其他地方
備註:
(1)您的示例似乎是針對SQL-Server的,因此您可能需要對例如我在這裏發佈。 (2)我強制遞歸10次後調用結束。
調用存儲過程本身時要特別小心,無限迭代可能會導致一些主要問題,這取決於proc中正在做什麼。
如果你在proc中使用條件來確保只執行你想要的次數,那麼你可以解決這個問題。
BEGIN
IF @TEST = 'VALUE'
EXEC PROCNAME @PROCPARAM
ELSE
'SOMETHING ELSE'
END IF ;
你可以做到這一點,但你必須以某種方式管理你將如何擺脫執行(如果可能的話)。
如果您創建一個存儲過程,本身內執行所述處理程序,然後執行它,它只是執行與
Maximum stored procedure, function, trigger, or view nesting level exceeded
錯誤信息infinately,直到你得到滿足。
在99%的情況下,會有更好的方法。而是發佈你想要達到什麼樣的問題,並展示你所嘗試過的東西,並讓人們提出獲得理想結果的更好方法。
你必須有條件地調用它否則它會在無限時間將他稱爲自我 – Developerzzz
你正在使用哪個數據庫?你想實現什麼?順便說一下,這是一個有效的通話,但它會無限循環。 – Ubercool
在SQL Server中,您可以編寫遞歸存儲過程。請記住,最大嵌套級別只有32個。請參閱['@@ NESTLEVEL'](https://msdn.microsoft.com/zh-cn/library/ms187371.aspx) –