Executar procedimento armazenado com um parâmetro de saída?

197

Eu tenho um procedimento armazenado que estou tentando testar. Estou tentando testá-lo através do SQL Management Studio. Para executar este teste, eu entro ...

exec my_stored_procedure 'param1Value', 'param2Value'

O parâmetro final é um output parameter. No entanto, não sei como testar um procedimento armazenado com parâmetros de saída.

Como executo um procedimento armazenado com um parâmetro de saída?

user70192
fonte

Respostas:

225

A maneira mais fácil é right-clicknos procedureno SQL Server Management Studio (SSMS),

selecionar execute stored procedure...

e adicione valores para os parâmetros de entrada, conforme solicitado.

SSMSirá gerar o código para executar o proc em uma nova janela de consulta e executá-lo para você. Você pode estudar o código gerado para ver como isso é feito.

Raio
fonte
2
Conheço todas as outras maneiras possíveis de executar o procedimento armazenado (como EXEC, chamando de C # ou PHP), mas essa é a mais fácil e uma pessoa não técnica pode fazer isso. então +1 para isso e thx para compartilhar as informações.
Dhaval 3/09/13
Eu não tenho um executecomando, o menu de contexto tem apenas a modify.
Akbari 8/15
Isso parece estranho. Meu menu de contexto em um procedimento armazenado tem cerca de uma dúzia de itens, incluindo modificar, executar, propriedades, e outros
Ray
2
Acho que a resposta de Jaider abaixo completa essa resposta, já que eu mesmo estaria interessado no comando escrito e não na solução do mouse.
Alwyn Schoeman
Outra maneira ligeiramente diferente de usar o SSMS: clique com o botão direito do mouse no SP, clique em "Procedimento armazenado por script como" e clique em "EXECUTAR PARA". Isso mostrará o TSQL.
John Gilmer
167

você consegue fazer isso :

declare @rowCount int
exec yourStoredProcedureName @outputparameterspOf = @rowCount output
farhad
fonte
7
Eu não estava dizendo 'OUTPUT' no final. Sempre algo estúpido, obrigado!
Milne
Eu gosto de evitar a abertura de diálogos no SSMS, tanto quanto possível, para que isso fosse perfeito.
ahwm 22/09/15
89

Valor de retorno do procedimento

ALTER PROCEDURE testme @input  VARCHAR(10),
                       @output VARCHAR(20) output
AS
  BEGIN
      IF @input >= '1'
        BEGIN
            SET @output = 'i am back';

            RETURN;
        END
  END

DECLARE @get VARCHAR(20);

EXEC testme
  '1',
  @get output

SELECT @get 
wasay raza
fonte
42

Verifique isto, onde os dois primeiros parâmetros são parâmetros de entrada e o terceiro é o parâmetro Saída na definição de Procedimento.

DECLARE @PK_Code INT;
EXEC USP_Validate_Login  'ID', 'PWD', @PK_Code OUTPUT
SELECT @PK_Code
Sheikh M. Haris
fonte
30

Em http://support.microsoft.com/kb/262499

Exemplo:

CREATE PROCEDURE Myproc

@parm varchar(10),
**@parm1OUT varchar(30) OUTPUT**,
**@parm2OUT varchar(30) OUTPUT**
AS
  SELECT @parm1OUT='parm 1' + @parm
 SELECT @parm2OUT='parm 2' + @parm

GO

DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @parmIN VARCHAR(10)
DECLARE @parmRET1 VARCHAR(30)
DECLARE @parmRET2 VARCHAR(30)

SET @parmIN=' returned'
SET @SQLString=N'EXEC Myproc @parm,
                         @parm1OUT OUTPUT, @parm2OUT OUTPUT'
SET @ParmDefinition=N'@parm varchar(10),
                  @parm1OUT varchar(30) OUTPUT,
                  @parm2OUT varchar(30) OUTPUT'

EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@parm=@parmIN,
@parm1OUT=@parmRET1 OUTPUT,@parm2OUT=@parmRET2 OUTPUT

SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2"
GO
DROP PROCEDURE Myproc

Espero que isto ajude!

ajdams
fonte
26

Exemplo de procedimento:

Create Procedure [dbo].[test]
@Name varchar(100),
@ID int Output   
As  
Begin   
SELECT @ID = UserID from tbl_UserMaster where  Name = @Name   
Return;
END     

Como chamar este procedimento

Declare @ID int    
EXECUTE [dbo].[test] 'Abhishek',@ID OUTPUT   
PRINT @ID
Abhishek Jaiswal
fonte
18

Primeiro, declare a variável de saída:

DECLARE @MyOutputParameter INT;

Em seguida, execute o procedimento armazenado e você pode fazê-lo sem os nomes dos parâmetros, como este:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

ou com nomes de parâmetros:

EXEC my_stored_procedure @param1 = 'param1Value', @myoutput = @MyOutputParameter OUTPUT

E, finalmente, você pode ver o resultado da saída fazendo um SELECT:

SELECT @MyOutputParameter 
Jaider
fonte
4
isto deveria ter sido a resposta escolhida
anaval
9

Que tal agora? É extremamente simplificado:

  1. O SPROC abaixo possui um parâmetro de saída de @ParentProductID

  2. Queremos selecionar o valor da saída @ParentProductIDpara o @MyParentProductIDqual está declarado abaixo.

  3. Aqui está o código:

    declare @MyParentProductID int
    
    exec p_CheckSplitProduct @ProductId = 4077, @ParentProductID =  @MyParentProductID output
    
    select @MyParentProductID
user1388325
fonte
7

> Tente isto funcionando bem para o parâmetro de saída múltipla:

CREATE PROCEDURE [endicia].[credentialLookup]
@accountNumber varchar(20),
@login varchar(20) output,
@password varchar(50) output
AS
BEGIN
SET NOCOUNT ON;
SELECT top 1 @login = [carrierLogin],@password = [carrierPassword]
  FROM [carrier_account] where carrierLogin = @accountNumber
  order by clientId, id
END

Try for the result: 
SELECT *FROM [carrier_account] 
DECLARE @login varchar(20),@password varchar(50)
exec [endicia].[credentialLookup] '588251',@login OUTPUT,@password OUTPUT
SELECT 'login'=@login,'password'=@password
Yashwant Software Developer
fonte
3
CREATE PROCEDURE DBO.MY_STORED_PROCEDURE
(@PARAM1VALUE INT,
@PARAM2VALUE INT,
@OUTPARAM VARCHAR(20) OUT)
AS 
BEGIN
SELECT * FROM DBO.PARAMTABLENAME WHERE PARAM1VALUE=@PARAM1VALUE
END

DECLARE @OUTPARAM2 VARCHAR(20)
EXEC DBO.MY_STORED_PROCEDURE 1,@OUTPARAM2 OUT
PRINT @OUTPARAM2
Dhrubajyoti Das
fonte
3

Com esta consulta, você pode executar qualquer procedimento armazenado (com ou sem parâmetro de saída):

DECLARE @temp varchar(100)  
EXEC my_sp
    @parameter1 = 1, 
    @parameter2 = 2, 
    @parameter3 = @temp output, 
    @parameter4 = 3, 
    @parameter5 = 4
PRINT @temp

Aqui, o tipo de dados @temp deve ser o mesmo que @ parameter3 no SP.

Espero que isto ajude..

Matéria escura
fonte
Isso foi útil para mim. Obrigado. Não pensei em declarar a variável primeiro. Só precisava ver um exemplo de sintaxe. Era isso.
Steven Johnson
1

Aqui está o procedimento armazenado

create procedure sp1
(
@id as int,
@name as nvarchar(20) out
)
as
begin
select @name=name from employee where id=@id
end

E aqui está o caminho para executar o procedimento

 declare @name1 nvarchar(10)
    exec sp1 1,@name1 out
    print @name1
Debendra Dash
fonte
1

Por favor, verifique o exemplo abaixo para obter o valor da variável de saída executando um procedimento armazenado.

    DECLARE @return_value int,
    @Ouput1 int,
    @Ouput2 int,
    @Ouput3 int

EXEC    @return_value = 'Your Sp Name'
        @Param1 = value1,
        @Ouput1 = @Ouput1 OUTPUT,
        @Ouput2 = @Ouput2 OUTPUT,
        @Ouput3 = @Ouput3 OUTPUT

SELECT  @Ouput1 as N'@Ouput1',
        @Ouput2 as N'@Ouput2',
        @Ouput3 as N'@Ouput3'
Rony Patel
fonte
-1

Estou usando o parâmetro de saída no SQL Proc e mais tarde usei esses valores no conjunto de resultados.

insira a descrição da imagem aqui

Ajeet Verma
fonte