首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >超过最大存储过程、函数、触发器或视图嵌套级别(限制32)

超过最大存储过程、函数、触发器或视图嵌套级别(限制32)
EN

Stack Overflow用户
提问于 2013-08-22 11:59:10
回答 9查看 126.8K关注 0票数 40

我正在创建一个存储过程,但是在执行过程时,我得到了特定的错误。

MSG217、级别16、状态1、过程SendMail_Renewapp、第77行最大存储过程、函数、触发器或视图嵌套级别超出(限制32)。

有人能帮我解决这个问题吗。

我的程序如下。

代码语言:javascript
运行
复制
`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`
EN

回答 9

Stack Overflow用户

发布于 2015-10-30 16:55:23

在结束语句后使用"Go“

票数 46
EN

Stack Overflow用户

发布于 2017-01-25 14:39:28

该过程是在其内部创建的,其内部有一个自己的执行部分。因此,必须在执行程序之前放置GO,以便在执行之前创建/更改过程。因此,避免递归。

票数 26
EN

Stack Overflow用户

发布于 2016-12-16 06:27:19

使用TRIGGER_NESTLEVEL函数检查触发器嵌套级别,如果触发器级别大于1时,则停止触发器执行操作。

代码语言:javascript
运行
复制
 IF TRIGGER_NESTLEVEL() > 1
     RETURN

错误的发生是因为嵌套级别超过了它的极限,因为我们都知道触发器会不断地触发,并且很难控制触发器的行为。函数TRIGGER_NESTLEVEL返回嵌套级别,我们可以停止嵌套级别的增加。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18379805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档