2014-04-21 6 views
0

을 실행할 수 없습니다. 내 저장 프로 시저입니다. SQL Server에서 아래 스크립트를 실행하면이 오류가 발생합니다.저장 프로 시저를 통해 SQL Server 및 코드

최대 저장 프로 시저, 함수, 트리거 또는 뷰 중첩 수준이 초과되었습니다 (제한 32).

코드 :

Create Procedure [dbo].[GetTotalProductWcnCrashes] 
(
    @DroidbugCount int, 
    @totalproductcrashes int out, 
    @Uniqueproductcrashes int out, 
    @SnsPL varchar(500) out, 
    @Startdate datetime out, 
    @Metabuild varchar(500) out, 
    @Rivabuild varchar(500) out, 
    @Appsbuild varchar(500) out, 
    @toatalWcnCrashes int out, 
    @UniqueWcnCrashes int out, 
    @TotalHours numeric(18,0) OUT, 
    @Mtbf numeric(18,4) OUT, 
    @Cpth numeric(18,4) OUT 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE 
     @SQL nvarchar(max), 
     @SQLString nvarchar(max), 
     @ParmDefinition nvarchar(max), 
     @totalproductcrashes1 int, 
     @Uniqueproductcrashes1 int , 
     @SnsPL1 varchar(500), 
     @Startdate1 datetime, 
     @Metabuild1 varchar(500), 
     @Rivabuild1 varchar(500), 
     @Appsbuild1 varchar(500), 
     @toatalWcnCrashes1 int, 
     @UniqueWcnCrashes1 int, 
     @TotalHours1 numeric(18,0), 
     @Mtbf1 numeric(18,4), 
     @Cpth1 numeric(18,4), 
     @DroidbugCount1 INT   

    SET @SQL = N'SELECT @SnsPL = SnsPl.PL, @Startdate = SnsHeader.Startdate, @Metabuild = SnsHeader.Metabuild, @Rivabuild = SnsHeader.RivaBuild, @Appsbuild = SnsHeader.Appsbuild, @totalproductcrashes = SUM(CASE WHEN dbo.SnsResult.Crash like %Yes% THEN 1 ELSE 0 END), 
    @Uniqueproductcrashes = SUM(CASE WHEN dbo.SnsResult.UniqueCrash like %Yes% AND dbo.SnsResult.CR_ID is NULL THEN 1 ELSE 0 END), 
    @TotalHours = Sum(CAST(dbo.SnsResult.ResultDuration AS int)) 
    FROM dbo.SnsHeader 
    INNER JOIN dbo.SnsResult ON dbo.SnsHeader.SnsHeader_PK = dbo.SnsResult.SnsHeader_FK 
    INNER JOIN dbo.SnsPl ON dbo.SnsHeader.PL_FK = dbo.SnsPl.PL_PK 
    GROUP BY dbo.SnsPl.PL , SnsHeader.Startdate ,SnsHeader.Metabuild,SnsHeader.RivaBuild,SnsHeader.Appsbuild' 

SET @SQLString= N'EXEC GetTotalProductWcnCrashes @DroidbugCount, 
@totalproductcrashes OUTPUT, 
@Uniqueproductcrashes OUTPUT, 
@SnsPL OUTPUT, 
@Startdate OUTPUT, 
@Metabuild OUTPUT, 
@Rivabuild OUTPUT, 
@Appsbuild OUTPUT, 
@toatalWcnCrashes OUTPUT, 
@UniqueWcnCrashes OUTPUT, 
@TotalHours OUTPUT, 
@Mtbf OUTPUT, 
@Cpth OUTPUT' 


SET @ParmDefinition = N'@DroidbugCount int, 
@totalproductcrashes INT OUTPUT, 
@Uniqueproductcrashes INT OUTPUT, 
@SnsPL varchar(500) OUTPUT, 
@Startdate datetime OUTPUT, 
@Metabuild varchar(500) OUTPUT, 
@Rivabuild varchar(500) OUTPUT, 
@Appsbuild varchar(500) OUTPUT, 
@toatalWcnCrashes INT OUTPUT, 
@UniqueWcnCrashes INT OUTPUT, 
@TotalHours numeric(18,0) OUTPUT, 
@Mtbf numeric(18,4) OUTPUT, 
@Cpth numeric(18,4) OUTPUT' 


SET @DroidbugCount1 = 1 
EXECUTE sp_executesql 
@SQLString, 
@ParmDefinition, 
@[email protected], 
@totalproductcrashes = @totalproductcrashes1 OUTPUT , 
@Uniqueproductcrashes = @Uniqueproductcrashes1 OUTPUT, 
@SnsPL = @SnsPL1 OUTPUT, 
@Startdate = @Startdate1 OUTPUT , 
@Metabuild = @Metabuild1 OUTPUT, 
@Rivabuild = @Rivabuild1 OUTPUT, 
@Appsbuild = @Appsbuild1 OUTPUT, 
@toatalWcnCrashes = @toatalWcnCrashes1 OUTPUT, 
@UniqueWcnCrashes = @UniqueWcnCrashes1 OUTPUT, 
@TotalHours = @TotalHours1 OUTPUT, 
@Mtbf = @Mtbf1 OUTPUT, 
@Cpth = @Cpth1 OUTPUT 


     SELECT @totalproductcrashes1 as N'@totalproductcrashes', 
    @Uniqueproductcrashes1 as N'@Uniqueproductcrashes', 
    @SnsPL1 as N'@SnsPL', 
    @Startdate1 as N'@Startdate', 
    @Metabuild1 as N'@Metabuild', 
    @Rivabuild1 as N'@Rivabuild', 
    @Appsbuild1 as N'@Appsbuild', 
    @toatalWcnCrashes1 as N'@toatalWcnCrashes', 
    @UniqueWcnCrashes1 as N'@UniqueWcnCrashes', 
    @TotalHours1 as N'@TotalHours', 
    @Mtbf1 as N'@Mtbf', 
    @Cpth1 as N'@Cpth' 
    END 

누군가가 위의 저장 프로 시저를 해결하는 데 도움이, 내가 저장 프로 시저를 작성하는 새입니다.

그리고 위의 저장 프로 시저를 C# 코드에서 호출하는 방법

감사합니다.

+1

보인다. SQL Server 32에서이 오류가 발생하는 이유는 최대 중첩 수준입니다. – Abhi

답변

2

저장 프로 시저 GetTotalProductWcnCrashes는 무한 루프로 자신을 호출합니다. 어떻게이 저장 프로 시저를 생성 했습니까?

저장 프로 시저를 일반적으로 살펴보면 첫 번째 select 문만 있으면 나머지 저장 프로 시저가 실행할 저장 프로 시저를 선택할 때 SQL Management Studio의 일부 자동 생성 코드처럼 보입니다. 어떤 이유로 스토어드 프로 시저의 맨 위에 저장되었습니다.

저장 프로 시저가 이와 유사해야합니다. 하지만 염두에두고 당신의 데이터베이스를 곰.

USE [Reports] 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 


Create Procedure [dbo].[GetTotalProductWcnCrashes] 
(
@DroidbugCount int, 
@totalproductcrashes int out, 
@Uniqueproductcrashes int out, 
@SnsPL varchar(500) out, 
@Startdate datetime out, 
@Metabuild varchar(500) out, 
@Rivabuild varchar(500) out, 
@Appsbuild varchar(500) out, 
@toatalWcnCrashes int out, 
@UniqueWcnCrashes int out, 
@TotalHours numeric(18,0) OUT, 
@Mtbf numeric(18,4) OUT, 
@Cpth numeric(18,4) OUT 
) 
AS 

BEGIN 

SET NOCOUNT ON; 


SELECT @SnsPL = SnsPl.PL,@Startdate=SnsHeader.Startdate,@Metabuild=SnsHeader.Metabuild, 
    @Rivabuild=SnsHeader.RivaBuild,@Appsbuild=SnsHeader.Appsbuild, 
    @totalproductcrashes = SUM(CASE WHEN dbo.SnsResult.Crash like '%Yes%' THEN 1 ELSE 0 END), 
    @Uniqueproductcrashes = SUM(CASE WHEN dbo.SnsResult.UniqueCrash like '%Yes%' AND dbo.SnsResult.CR_ID is NULL THEN 1 ELSE 0 END), 
    @TotalHours = Sum(CAST(dbo.SnsResult.ResultDuration AS int)) 
    FROM dbo.SnsHeader 
    INNER JOIN dbo.SnsResult ON dbo.SnsHeader.SnsHeader_PK = dbo.SnsResult.SnsHeader_FK 
    INNER JOIN dbo.SnsPl ON dbo.SnsHeader.PL_FK = dbo.SnsPl.PL_PK 
    GROUP BY dbo.SnsPl.PL , SnsHeader.Startdate ,SnsHeader.Metabuild,SnsHeader.RivaBuild,SnsHeader.Appsbuild 

    END 

    GO 

명심하십시오 나는 데이터베이스를 내가 잘되지 않을 수 있습니다 넣어이 예제를 해달라고하지만 확실히 저장 프로 시저가 수정되지 않고 논쟁 적 최대 32 중첩 호출 횟수까지 자신을 호출합니다.

의견에 귀하의 질문에 대답하려면이 stackoverflow 링크를 따라 C#을 사용하여 저장 프로 시저를 호출하는 방법을 찾아보십시오. 당신이 어떤 휴식 상태 (일명 무한 루프)없이 반복적으로 동일한 저장 프로 시저를 호출하려고처럼

How to execute a stored procedure within C# program

+0

C# 코드에서이 저장 프로 시저를 호출하는 방법? – mvinay

+0

나는 그것을 대답에 추가했다. 링크를 보라. – dmportella

관련 문제