[英]Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32) using SQL Server 2014
[英]How to solve maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32)
我面臨最大存儲過程,function 觸發器,或者視圖嵌套級別超出。 在這里,我想查找基於 fromdate 和 todate 的數據。
我的問題是我試圖將一種日期格式轉換為另一種。 例如,我正在將此格式 08-06-2020 00:00:00 轉換為 2020-06-08 00:00:00.000。 錯誤在 Status = 1 中,我正在獲取我的數據,但出現此錯誤。 如果有人可以幫助我,我將不勝感激。
這是我的存儲過程:
ALTER PROCEDURE [dbo].[USP_GetRequest_DataListForViewPrint]
@RequestNo VARCHAR(50),
@FromDate varchar(50),
@ToDate varchar(50),
@Status varchar(20)
AS
BEGIN
DECLARE @SQLStr varchar(8000)
DECLARE @CurrentDate Varchar(100) = GETDATE()
IF (@RequestNo IS NOT NULL)
BEGIN
SET @SQLStr = 'SELECT Id,RequestStatus, RequestNo,RequestDate From CYGNUX_Request_Header WHERE RequestNo='+''''+@RequestNo+'''';
END
ELSE
IF @Status = '1'
BEGIN
SET @SQLStr = 'select Id,RequestStatus,RequestDate,RequestNo from CYGNUX_Request_Header where RequestDate between '+CHAR(39)+ CONVERT(varchar(10), CONVERT(datetime, @FromDate, 101), 103) +CHAR(39)+ ' AND '+CHAR(39)+ CONVERT(varchar(10), CONVERT(datetime, @ToDate, 101), 103) +CHAR(39);
END
IF @Status ='2'
BEGIN
SET @SQLStr = 'select Id,RequestStatus, RequestNo, RequestDate from CYGNUX_Request_Header where RequestDate>='+CHAR(39)+ CAST(DATEADD(day,-7,convert(varchar(100),@CurrentDate)) AS varchar(50))+CHAR(39);
END
IF @Status ='3'
BEGIN
SET @SQLStr = 'select Id,RequestStatus,RequestNo, RequestDate As Today from CYGNUX_Request_Header Where RequestDate='+CHAR(39)+ convert(varchar(50) , @CurrentDate) +CHAR(39) ;
END
IF @Status ='4'
BEGIN
SET @SQLStr = 'select Id,RequestStatus, RequestNo,RequestDate from CYGNUX_Request_Header WHERE RequestDate<=' +CHAR(39)+ convert(varchar(50) , @CurrentDate) +CHAR(39);
END
PRINT @SQLStr;
EXEC(@SQLStr);
END
這是我面臨的錯誤截圖:
我認為這段代碼不會導致您的問題。 但仍可以通過消除動態 SQL 來改進。 如果不需要,請勿使用動態 SQL:
ALTER PROCEDURE [dbo].[USP_GetRequest_DataListForViewPrint]
@RequestNo VARCHAR(50),
@FromDate DATE,
@ToDate DATE,
@Status varchar(20)
AS
BEGIN
IF (@RequestNo IS NOT NULL)
BEGIN
SELECT Id, RequestStatus, RequestNo, RequestDate
From CYGNUX_Request_Header
WHERE RequestNo = @RequestNo;
END;
ELSE IF (@status = '1')
BEGIN
select Id, RequestStatus, RequestNo, RequestDate
from CYGNUX_Request_Header
where RequestDate between @FromDate and ToDate;
END;
ELSE IF (@status = '2')
BEGIN
select Id, RequestStatus, RequestNo, RequestDate
from CYGNUX_Request_Header
where RequestDate >= convert(date, getdate());
END;
. . .
END:
您的問題是“EXEC sp_name”命令位於存儲過程本身內部,因此它一直在循環中運行。
你可以做:
創建 sp_name... 開始... 結束
GO
執行(sp_name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.