2017-09-08 2 views
-2

Ich habe eine gespeicherte Masterprozedur, in der viele gespeicherte Prozeduren gespeichert sind, z. B. 10 gespeicherte Prozeduren.Festlegen der Reihenfolge für die Ausführung der gespeicherten Prozeduren in einer gespeicherten Masterprozedur

Was ich will ist, wenn ich die gespeicherte Prozedur 1, gespeicherte Prozedur 2 angeben, dann sollten nur diese 2 gespeicherten Prozeduren ausgeführt werden, die anderen 8 sollten nicht ausgeführt werden.

Und wenn ich keinen Wert für die Reihenfolge angeben, sollte es alle gespeicherten Prozeduren ausführen.

Jemand bitte sagen Sie mir, wie es geht? Gibt es eine Möglichkeit, es zu implementieren?

Ich brauche 1 Parameter, der Komma getrennt sein könnte. Das heißt, wenn wir 1,2 in einem Parameter angeben, dann wird es Verfahren 1 und 2.

SET QUOTED_IDENTIFIER ON; 
GO 
SET ANSI_NULLS ON; 
GO 
SET NOCOUNT ON; 
GO 


CREATE PROCEDURE dbo.CI_ILR_Indicator_Master 
    (
    @StartYear INT, 
    @EndYear INT 
    ) 
AS 
BEGIN 

--Temptable '#TempILR' is created, which contains the common data needed for all the indicator calculation of 'ILR' 


--Executing the SP [dbo.CI_ILR_Indicator_VRQ_WBL Indicators] for the ILR Indicator group 
--'ILR VRQ WBL' for Indicators (8,9,10) 
EXEC SP1 @StartYear,@EndYear 
EXEC SP2 @StartYear,@EndYear 
EXEC SP3 @StartYear,@EndYear 
EXEC SP4 @StartYear,@EndYear 
EXEC SP5 @StartYear,@EndYear 
EXEC SP6 @StartYear,@EndYear 
EXEC SP7 @StartYear,@EndYear 
EXEC SP8 @StartYear,@EndYear 
EXEC SP9 @StartYear,@EndYear 
EXEC SP10 @StartYear,@EndYear 

END 

Dies ist, wie mein SP sieht ..

+0

Hallo durch den Code gehen, sobald es wil Sie –

Antwort

0
CREATE PROCEDURE [dbo].[Master Sp] 
( 
    @INT_sp1 int= null, 
    @INT_sp2 int= null, 
    @INT_sp3 int= null, 
    @INT_sp4 int= null, 
    @INT_sp5 int= null, 
    @INT_sp6 int= null, 
    @INT_sp7 int= null, 
    @INT_sp8 int= null, 
    @INT_sp9 int= null, 
    @INT_sp10 int= null 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    if @INT_sp1 is not null 
     exec dbo.sp1 
    if @INT_sp2 is not null 
     exec dbo.sp2 
    ...... 
END 

GO 
+0

kippe hilft wir es nur Komma separted verwenden 1 Parameter und machen. Ich weiß nicht, wie es gemacht wird .. Aber wenn wir 50 sp haben. dann können wir nicht weiter den Parameter hinzufügen. @ sapi – Catwoman

0

diese gespeicherte Proc Folgen, gespeichert execute wird es hilft Ihnen

CREATE PROCEDURE [dbo].[Usp_RunSp] --give sp list like 'Sp1,Sp2,Sp3' else by default 
(
@vr_SpList VARCHAR(1000)=NULL, 
@i_StartYear INT , 
@i_EndYear INT 
) 
AS 
    BEGIN 
     BEGIN try 
      IF Object_id('tempdb..#FinalResult')IS NOT NULL 
      DROP TABLE #finalresult 

      IF Object_id('tempdb..#RunSp')IS NOT NULL 
      DROP TABLE #runsp 

      IF Object_id('tempdb..#TotalSPToRun')IS NOT NULL 
      DROP TABLE #totalsptorun 

      CREATE TABLE #finalresult 
      ( 
       Rno  INT, 
       Spnamelist VARCHAR(100) 
      ) 

      CREATE TABLE #totalsptorun 
      ( 
       Id   INT IDENTITY, 
       Spnamelist VARCHAR(100) 
      ) 

      DECLARE @RunSql NVARCHAR(max) 
      DECLARE @Sp_List TABLE 
      ( 
       Spnamelist VARCHAR(100) 
      ) 

      INSERT INTO @Sp_List 
      SELECT @vr_SpList 

      SELECT split.a.value('.', 'nvarchar(1000)') AS SpnameList 
      INTO #runsp 
      FROM (SELECT Cast('<S>' + Replace(Spnamelist, ',', '</S><S>') 
           + '</S>' AS XML) AS Data 
        FROM @Sp_List) AS A 
       CROSS apply data.nodes('S') AS Split(a) 

      INSERT INTO #totalsptorun --add your 10 sp names instead of sp1,sp2 
         (Spnamelist) 
      SELECT 'Sp1'   UNION ALL 
      SELECT 'Sp2'   UNION ALL 
      SELECT 'Sp3'   UNION ALL 
      SELECT 'Sp4'   UNION ALL 
      SELECT 'Sp5'   UNION ALL 
      SELECT 'Sp6'   UNION ALL 
      SELECT 'Sp7'   UNION ALL 
      SELECT 'Sp8'   UNION ALL 
      SELECT 'Sp9'   UNION ALL 
      SELECT 'S10' 

      IF @vr_SpList IS NOT NULL 
      BEGIN 
       SET @RunSql =' INSERT INTO #FinalResult 
           SELECT ROW_NUMBER()OVER(ORDER BY (SELECT 1)) AS RNo, 
             R.SpnameList 
           FROM #TotalSPToRun R 
            INNER JOIN #RunSp L 
           ON L.SpnameList=R.SpnameList' 

       EXEC(@RunSql) 
      END 

      IF @vr_SpList IS NULL 
      BEGIN 
       SET @RunSql =' INSERT INTO #FinalResult 
           SELECT ROW_NUMBER()OVER(ORDER BY (SELECT 1)) AS RNo, 
             R.SpnameList 
           FROM #TotalSPToRun R ' 

       --PRINT @RunSql 

       EXEC(@RunSql) 
      END 

      DECLARE @SqlRun NVARCHAR(max), 
        @SpName VARCHAR(100), 
        @minID INT, 
        @maxId INT 

      SELECT @minID = Min(Rno),@maxId = Max(Rno) 
      FROM #Finalresult 

      WHILE (@minID <= @maxId) 
      BEGIN 
       SELECT @SpName = Spnamelist 
       FROM #finalresult 
       WHERE Rno = @minID 

       SET @SqlRun=N'EXECUTE ' + @SpName+' '+CAST(@i_StartYear AS VARCHAR)+','+CAST(@i_EndYear AS VARCHAR) 
       SET @[email protected] + 1 

       PRINT @SqlRun 
       EXEC(@SqlRun) 
      END 
     END try 

     BEGIN catch 
      SELECT Error_number() AS ErrorNumber, 
       Error_severity() AS ErrorSeverity, 
       Error_state()  AS ErrorState, 
       Error_procedure() AS ErrorProcedure, 
       Error_line()  AS ErrorLine, 
       Error_message() AS ErrorMessage 
     END catch 
    END 
+0

wenn ich das sehe, denke ich "was ist das wirklich heck!". Wirklich schrecklich. –

+0

@ Srini131-Thanku so viel .. Ich habe meinen Code bearbeitet..Könnten Sie mir helfen, wie es in meinem Code zu tun ... Vielen Dank für Ihre Mühe .. – Catwoman

+0

@Catwoman Sie wollen diese Parameter übergeben Wert StartJahr, EndYear für jedes Recht ist das Ihre Anforderung? –

Verwandte Themen