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) –