简体   繁体   中英

Unable to execute stored procedure throught sql server and also from code

Here is my stored procedure. When I execute the below script in SQL Server I got this error :

Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).

Code:

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,
@DroidbugCount=@DroidbugCount1,
@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

Somebody help me to correct above stored procedure, I am new to writing stored procedures.

And how to call the above stored procedure from C# code

Thanks in advance.

Your stored procedure GetTotalProductWcnCrashes calls itself in a endless loop. How did you generate this stored procedure.

Having a general look at your stored procedure you only need the first select statement the rest of the stored procedure seems like some auto generated code from the SQL Management Studio when you select a stored procedure to execute. For some reason that was saved on top of your stored procedure.

Your stored procedure should be something like this instead. But bear in mind I dont your database.

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

Please bear in mind I dont have the database this example I put up might not be right but for sure your stored procedure is not correct and calls itself contentiously up to the maximum 32 nested call count.

Also to answer your question on the comments please follow this stackoverflow link to find out how to call a stored procedure using c#.

How to execute a stored procedure within C# program

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM