Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32)

I am creating a store procedure but while executing the procedure i am getting the particular error.

Msg 217, Level 16, State 1, Procedure SendMail_Renewapp, Line 77 Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).

Can anyone please help me out from this problem.

My procedure is as follows..

`ALTER PROCEDURE [dbo].[SendMail_Renewapp]  -- Add the parameters for the stored procedure here  AS BEGIN declare @xml nvarchar(max) declare @body nvarchar(max) declare @currentdate datetime; declare @ExpDate datetime; declare @mailsendingdate datetime; declare @renewtime varchar(10);     DECLARE @AgencyId int; DECLARE @ApplicationID int; declare @emailid varchar(100);  set @currentdate=getdate();                   --Fetching the application details: start--                 DECLARE AppCursor CURSOR FOR                  Select top 5 applications.ap_id,applications.ap_expiry_date,agency.ag_co_email from applications  join agency on applications.ap_agency_id=agency.ag_id                  where ap_status='AS' and ap_iame_flag='IA' and ap_expiry_date != ''                      OPEN AppCursor                     FETCH NEXT FROM AppCursor INTO @ApplicationID,@ExpDate,@emailid                      WHILE @@FETCH_STATUS = 0                      BEGIN                       SET @renewtime = ABS(DATEDIFF(day, @currentdate, @ExpDate))                             if(@renewtime=180)                                  BEGIN                                      --SET @xml = CAST(( SELECT [ag_id] AS 'td','',[ag_name] AS 'td','',[ag_co_email] AS 'td','',[ag_mobile] AS 'td'FROM  beesl.dbo.Agency where @renewtime < 180 --FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))  SET @body ='<html> <body>    <div> <div> <H3>Agencies Details whose payment are still pending for last 3 months</H3> </div> <table cellpadding="4" cellspacing="1" bgcolor=#FFFFFF   border=1 rules=none frame=box  >  <tr  > <th style=border:1px solid #000000;  align=left bgcolor=#c2c2c2> Agency ID </th>  <th style=border:1px solid #000000;  align=left bgcolor=#c2c2c2> Agency Name </th>  <th style=border:1px solid #000000;   align=left bgcolor=#c2c2c2> Agency Email </th>  <th style=border:1px solid #000000;   align=left bgcolor=#c2c2c2> Contact Number </th>   </tr>'        SET @body = @body + @xml +'</table></div></body></html>'  EXEC msdb.dbo.sp_send_dbmail  @profile_name='BEE',  @recipients='[email protected]',  @subject='Renew Applications', --@file_attachments = 'D:\beelogo.png', @importance= High, --@body = 'Testing' @body = @body, @body_format ='HTML';                                  END                       FETCH NEXT FROM AppCursor INTO      @ApplicationID,@ExpDate,@emailid                 END                     CLOSE AppCursor                     DEALLOCATE AppCursor                 --Fetching the application details: end--     END` 
like image 567
user2198392 Avatar asked Aug 22 '13 11:08

user2198392


People also ask

Why set Nocount on is used in SQL?

SET NOCOUNT ON prevents the sending of DONEINPROC messages to the client for each statement in a stored procedure.

Which of the system defined stored procedure?

A stored procedure is a set of Structured Query Language (SQL) statements with an assigned name, which are stored in a relational database management system (RDBMS) as a group, so it can be reused and shared by multiple programs.


2 Answers

Use the "Go" after the END statement

like image 86
user2936035 Avatar answered Sep 28 '22 06:09

user2936035


The procedure is created with an EXEC of itself inside it. Therefore, a GO must be placed before the EXEC so the procedure will be Created/Altered before getting executed. Thus, avoiding the RECURSION.

like image 36
jmag Avatar answered Sep 28 '22 05:09

jmag