none
Como pegar resultado de uma procedure dentro da outra, result de uma sql 3 campos RRS feed

  • Pergunta

  • Pessoal eu tenho essa procedure aqui

    ALTER PROCEDURE  [PROC_LOTECORRENTE] @CODCLI VARCHAR(5)

    AS
    BEGIN TRY  
        DECLARE @NUMFECCLI INT ,@DATINI DATETIME ,@DATFIN DATETIME
        SELECT @NUMFECCLI = NUMFECCLI, @DATINI = DATINI , @DATFIN = DATFIN
        FROM FECHCLIENTE
            WHERE CODCLI = @CODCLI
            AND GETDATE() >= DATINI AND GETDATE() < (DATFIN + 1)
         
        IF  (@NUMFECCLI IS NOT NULL) OR (@NUMFECCLI != 0)
            SELECT @NUMFECCLI AS 'NUMFECCLI',@DATINI AS 'DATINI',@DATFIN AS 'DATFIN'
        ELSE
           BEGIN
           SET @NUMFECCLI = 0
           SELECT @NUMFECCLI AS 'NUMFECCLI',@DATINI AS 'DATINI',@DATFIN AS 'DATFIN'
        END
     
    END TRY
    BEGIN CATCH
      SELECT
      'Erro na Procedure PROC_LOTECORRENTE' As Retorno,
      ERROR_MESSAGE()   AS MensagemdeErro,
      ERROR_LINE()      AS LinhadoErro,
      ERROR_NUMBER()    AS NúmeroErro
    END CATCH

    Como que eu faço para pegar o resultado dela , pois ela vai me retornar 3 linhas , isso dentro de outra procedure.

    quarta-feira, 18 de dezembro de 2013 13:13

Respostas

  • Olá,

         Uma sugestão seria você colocar o resultado da primeira proc dentro de uma tabela (temporária provavelmente) e utilizar na próxima proc passando como parâmetro a tabela (usando Table Value Parameter)

        Veja o Exemplo

    INSERT INTO SuaTabelaTemporaria
    EXECUTE dbo.PROC_LOTECORRENTE(Valor);
    
    execute dbo.PROC_QUE_RECEBE_A_TABELA (SuaTabelaTemporaria).
    
    --Exemplo da criacao da proc com TVP
    
    CREATE TYPE TabelaType AS TABLE 
    ( Campo1 Int
    , Campo2 INT );
    GO
    
    CREATE PROCEDURE PROC_QUE_RECEBE_A_TABELA 
        @TVP TabelaType READONLY
        AS 
        INSERT INTO OutraTabela
               (Campo1, Campo2)
            SELECT *
            FROM  @TVP;
            GO
    


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    quarta-feira, 18 de dezembro de 2013 14:31
    Moderador

Todas as Respostas

  • Olá,

         Uma sugestão seria você colocar o resultado da primeira proc dentro de uma tabela (temporária provavelmente) e utilizar na próxima proc passando como parâmetro a tabela (usando Table Value Parameter)

        Veja o Exemplo

    INSERT INTO SuaTabelaTemporaria
    EXECUTE dbo.PROC_LOTECORRENTE(Valor);
    
    execute dbo.PROC_QUE_RECEBE_A_TABELA (SuaTabelaTemporaria).
    
    --Exemplo da criacao da proc com TVP
    
    CREATE TYPE TabelaType AS TABLE 
    ( Campo1 Int
    , Campo2 INT );
    GO
    
    CREATE PROCEDURE PROC_QUE_RECEBE_A_TABELA 
        @TVP TabelaType READONLY
        AS 
        INSERT INTO OutraTabela
               (Campo1, Campo2)
            SELECT *
            FROM  @TVP;
            GO
    


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    quarta-feira, 18 de dezembro de 2013 14:31
    Moderador
  • Verdade não tinha pensando nisso não
    quarta-feira, 18 de dezembro de 2013 15:15