ALTER PROCEDURE dbo.CurePeriod
@curDate_p1 datetime
-- call
exec CurePeriod @curDateTrick
我可以在存储过程中调用自己吗? 这是正确的?非常感谢。
答案 0 :(得分:1)
在自己调用存储过程时要格外小心,无限次迭代会导致一些重大问题,具体取决于proc中的其他操作。
如果您在proc中使用条件以确保只执行您想要的次数,那么您可以解决这个问题。
BEGIN
IF @TEST = 'VALUE'
EXEC PROCNAME @PROCPARAM
ELSE
'SOMETHING ELSE'
END IF ;
答案 1 :(得分:1)
你可以这样做,但你必须以某种方式管理如何突破执行(如果可能的话)。
如果你创建一个存储过程,在自己内部执行所述过程然后执行它,它将只是无限执行,直到你遇到一个
Maximum stored procedure, function, trigger, or view nesting level exceeded
错误消息。
在99%的情况下,会有更好的方法。而是提出一个问题,即你想要实现的目标,并展示你所尝试的内容,并让人们建议更好的方法来获得理想的结果。
答案 2 :(得分:0)
许多DBMS都支持递归,原则上它的实现与你写的非常相似。
在您的示例中,需要退出条件以避免无限的递归深度,因此您应该具有以下内容:
CREATE PROCEDURE dbo.CurePeriod (@curDate_p1 datetime , @OtherParam INT)
AS
BEGIN
IF @OtherParam < 10 THEN
exec CurePeriod (@curDateTrick , @OtherParam + 1) ;
END IF ;
END ;
以及代码中的其他位置:
:
:
exec CurePeriod (@curDateTrick , 1) ;
:
:
注意:
(1)您的示例似乎是针对SQL-Server的,因此您可能需要对我在此处发布的示例进行一些编辑。
(2)我强迫递归在10次调用后结束。