Максимальный уровень хранимой процедуры, функции, триггера или уровня отображения вложенности превышен (предел 32)

Я создаю процедуру хранения, но при выполнении процедуры я получаю конкретную ошибку.

Msg 217, уровень 16, состояние 1, процедура SendMail_Renewapp, строка 77 Максимальный уровень хранимой процедуры, функции, триггера или уровня отображения вложенности превышен (предел 32).

Кто-нибудь может помочь мне решить эту проблему.

Моя процедура следующая.

`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',
[email protected]_attachments = 'D:\beelogo.png',
@importance= High,
[email protected] = '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`

Ответ 1

Используйте "Идти" после КОНЕЦ Заявление

Ответ 2

Процедура создается с помощью самого EXEC внутри нее. Поэтому перед EXEC должен быть размещен GO, поэтому процедура должна быть создана/изменена перед выполнением. Таким образом, избегая повторения.

Ответ 3

Удалите BEGIN и END для оператора IF

Пример

WHILE @@FETCH_STATUS = 0
BEGIN

    IF @variable
    --NO BEGIN
       --Do this
    --NO END
END

Ответ 4

Проверьте уровень вложенности триггера в начале триггера с помощью функции TRIGGER_NESTLEVEL и остановите триггер для выполнения действия, если уровень триггера больше 1.

 IF TRIGGER_NESTLEVEL() > 1
     RETURN

Ошибка возникает из-за уровня вложенности, превышающего его предел, потому что все мы знаем, что триггер постоянно срабатывает, и его трудно контролировать поведение триггера. Функция TRIGGER_NESTLEVEL возвращает уровень вложенности, и мы можем остановить уровень вложенности.

Не забудьте указать ответ, если это поможет вам. БЛАГОДАРЯ

Ответ 5

ALTER ваша база данных для RECURSIVE_TRIGGERS.

Если вложенные триггеры разрешены и триггер в цепочке запускает бесконечный цикл, уровень вложенности превышается, а триггер завершается. Тогда вы получите эту ошибку. поэтому просто введите этот запрос.

USE yourdatabase 
 GO
    -- Turn recursive triggers OFF in the database. 
      ALTER DATABASE yourdatabase    
      SET RECURSIVE_TRIGGERS OFF 
GO

Надеюсь, ваша проблема будет решена.