none
Colocar resultado de uma SP em uma variável RRS feed

  • Pergunta

  • Consigo colocar o resultado de uma SP dentro de uma variável???

    Meu problema é o seguinte: Qndo da um erro ao chamar a sp_send_cdosysmail, essa proc me retorna um código, que acaba sendo o retorna da SP que chama essa bendita... E isso faz com que o VB6 ache que a SP foi executada com sucesso, mesmo com o RAISERROR sendo disparado. Então pensei em inibir o resultado de uma sp_send_cdosysmail! Consegui colocando dentro de uma temporária, mas não queria ter que criar uma tabela temporária só pra isso, queria algo do tipo:

    EXEC @teste = master.dbo.sp_send_cdosysmail 

    Ou pelo menos conseguir inibir o retorno desta SP, que qndo da um erro, me retorna um código:


    Rogerio Borsoi

    terça-feira, 24 de setembro de 2013 14:55

Respostas

  • Rogério,

    Eu acredito que você esta se referindo a utilizar uma Stored Procedure com parâmetro de saída de valores, isso sim é muito comum e totalmente aplicável ao SQL Server.

    Veja os exemplos:

    Create Procedure #P_Calcular @N1 TinyInt, @N2 TinyInt, @MSN VarChar(40) = Null OutPut
    As
      Begin
      
       Declare @Total SmallInt
    
       Set @Total=0
       Set @Total=@N1+@N2
    
       If @Total =2
        Set @MSN='O Valor é: '+Convert(VarChar(3),@Total)			
       Else
        Set @MSN='A soma dos valores de entrada é: '+Convert(VarChar(3),@Total)			
    
       Print @MSN
      End
    
    #P_Calcular 1,2
    
    --Utilizando o resultado do parâmetro de Saída --
    Create Procedure #P_Calcular1 @N1 TinyInt, @N2 TinyInt, @Total SmallInt = Null OutPut 
    As
      Begin
     
       Set @Total=@N1+@N2
      End
    
    
    -- Declarando variáveis para utilização do parâmetro de saída --
     Declare @Total SmallInt 
     Execute #P_Calcular1 2,5,@Total Output
     
     If @Total <=3
      Print 'Menor'
     Else
      Print 'Maior'	


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 17:39
    • Marcado como Resposta Giovani Cr quarta-feira, 2 de outubro de 2013 18:28
    sexta-feira, 27 de setembro de 2013 15:15

Todas as Respostas

  • Rogerio,

    Chegaste da dar uma olhada na documentação sp_send_cdontsmail. 

     http://support.microsoft.com/kb/312839/pt-br

    Existe uma tabela para registrar as falhas:

    CREATE TABLE [dbo].[cdosysmail_failures]
    		([Date of Failure] datetime, 
    		[Spid] int NULL,
    		[From] varchar(100) NULL,
    		[To] varchar(100) NULL,
    		[Subject] varchar(100) NULL,
    		[Body] varchar(4000) NULL,
    		[iMsg] int NULL,
    		[Hr] int NULL,
    		[Source of Failure] varchar(255) NULL,
    		[Description of Failure] varchar(500) NULL,
    		[Output from Failure] varchar(1000) NULL,
    		[Comment about Failure] varchar(50) NULL)

    Dê uma olhada se você não consegue utilizar a procedure sp_send_dbmail do SQL Server para envio de email.

    Link: http://technet.microsoft.com/pt-br/library/ms190307.aspx

    "Se a resposta foi útil, não esqueça de marcar a resposta."

    Roberto Galvão 
    MCITP - Administration SQL Server 2008
    MCITP - Developer SQL Server 2008 
    MCSA - SQL Server 2012 
    MCT - SQL Server 
    Blog: http://bobgalvao.wordpress.com


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    • Sugerido como Resposta Roberto Galvão terça-feira, 24 de setembro de 2013 15:32
    terça-feira, 24 de setembro de 2013 15:31
  • Sim, Roberto, tenho conhecimento desta tabela.... Meu problema, é inibir o código de erro do retorno!

    A sp, além de gravar na tabela, manda um "Select @hr" de retorno...

    Mas pensando por um lado generico, será que consigo colocar esse retorno em uma variável (apenas para inibir).


    Rogerio Borsoi

    terça-feira, 24 de setembro de 2013 15:54
  • Tente fazer desta forma:

    DECLARE @TESTE INT

    EXEC @TESTE = master.dbo.sp_send_cdosysmail

    SELECT @TESTE


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    terça-feira, 24 de setembro de 2013 16:03
  • Roberto... foi exatamente o que eu fiz (ver primeiro tópico) e não deu certo!

    Rogerio Borsoi

    terça-feira, 24 de setembro de 2013 17:28
  • Rogerio,

    Estranho, como o retorno é um INT deveria funcionar.

    Qual a mensagem de erro que ocorre quando vc atribui a variável?


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |


    terça-feira, 24 de setembro de 2013 18:05
  • Roberto,

    Não dá erro, simplesmente não preenche a variável... Talvez por não ter um output na SP, não sei!


    Rogerio Borsoi

    quarta-feira, 25 de setembro de 2013 13:14
  • Rogerio,

    Acredito que sim, tente definir um output na sua procedure.

    Exemplo:

    CREATE PROCEDURE GetImmediateManager
       @employeeID INT,
       @managerID INT OUTPUT
    AS
    BEGIN
       SELECT @managerID = ManagerID 
       FROM HumanResources.Employee 
       WHERE EmployeeID = @employeeID
    END


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    quarta-feira, 25 de setembro de 2013 13:18
  • Rogério,

    Eu acredito que você esta se referindo a utilizar uma Stored Procedure com parâmetro de saída de valores, isso sim é muito comum e totalmente aplicável ao SQL Server.

    Veja os exemplos:

    Create Procedure #P_Calcular @N1 TinyInt, @N2 TinyInt, @MSN VarChar(40) = Null OutPut
    As
      Begin
      
       Declare @Total SmallInt
    
       Set @Total=0
       Set @Total=@N1+@N2
    
       If @Total =2
        Set @MSN='O Valor é: '+Convert(VarChar(3),@Total)			
       Else
        Set @MSN='A soma dos valores de entrada é: '+Convert(VarChar(3),@Total)			
    
       Print @MSN
      End
    
    #P_Calcular 1,2
    
    --Utilizando o resultado do parâmetro de Saída --
    Create Procedure #P_Calcular1 @N1 TinyInt, @N2 TinyInt, @Total SmallInt = Null OutPut 
    As
      Begin
     
       Set @Total=@N1+@N2
      End
    
    
    -- Declarando variáveis para utilização do parâmetro de saída --
     Declare @Total SmallInt 
     Execute #P_Calcular1 2,5,@Total Output
     
     If @Total <=3
      Print 'Menor'
     Else
      Print 'Maior'	


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 17:39
    • Marcado como Resposta Giovani Cr quarta-feira, 2 de outubro de 2013 18:28
    sexta-feira, 27 de setembro de 2013 15:15