Usuário com melhor resposta
Colocar resultado de uma SP em uma variável

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
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
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.comRoberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Roberto Galvão terça-feira, 24 de setembro de 2013 15:32
-
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
-
-
-
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 |
- Editado Roberto Galvão terça-feira, 24 de setembro de 2013 18:06
-
-
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 |
-
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