39

ストア プロシージャを作成していますが、プロシージャの実行中に特定のエラーが発生します。

メッセージ 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='emailid@emailid.com', 
@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`
4

9 に答える 9

42

END ステートメントの後に「Go」を使用します

于 2015-10-30T16:55:23.920 に答える
8

関数を使用してトリガーの先頭でトリガーのネスト レベルを確認しTRIGGER_NESTLEVEL、トリガー レベルが 1 より大きい場合はトリガーを停止してアクションを実行します。

 IF TRIGGER_NESTLEVEL() > 1
     RETURN

トリガーが継続的に起動し、トリガーの動作を制御するのが難しいことは誰もが知っているため、ネストレベルが制限を超えているためにエラーが発生しています。この関数TRIGGER_NESTLEVELはネスト レベルを返し、ネスト レベルの増加を停止できます。

于 2016-12-16T06:27:19.420 に答える
5

ステートメントのBEGINandを削除ENDしますIF

WHILE @@FETCH_STATUS = 0
BEGIN

    IF @variable
    --NO BEGIN
       --Do this
    --NO END
END
于 2013-08-22T12:28:45.667 に答える
3

使用する

RETURN

手続きの最後に

于 2020-06-10T21:21:39.247 に答える