¿Ejecutar procedimiento almacenado con un parámetro de salida?

197

Tengo un procedimiento almacenado que estoy intentando probar. Estoy tratando de probarlo a través de SQL Management Studio. Para ejecutar esta prueba entro ...

exec my_stored_procedure 'param1Value', 'param2Value'

El parámetro final es un output parameter. Sin embargo, no sé cómo probar un procedimiento almacenado con parámetros de salida.

¿Cómo ejecuto un procedimiento almacenado con un parámetro de salida?

usuario70192
fuente

Respuestas:

225

La manera más fácil es right-clicken las procedurede SQL Server Management Studio (SSMS),

Seleccione execute stored procedure...

y agregue valores para los parámetros de entrada cuando se le solicite.

SSMSluego generará el código para ejecutar el proceso en una nueva ventana de consulta y lo ejecutará por usted. Puede estudiar el código generado para ver cómo se hace.

Rayo
fuente
2
Conozco todas las otras formas posibles de ejecutar el procedimiento almacenado (como EXEC, llamar desde C # o PHP), pero esta es la forma más fácil y una persona no técnica puede hacer esto. entonces +1 para esto y gracias por compartir la información.
Dhaval
No tengo un executecomando, el menú contextual solo tiene un modify.
Akbari
Eso parece extraño. Mi menú contextual en un procedimiento almacenado tiene aproximadamente una docena de elementos, incluidos modificar, ejecutar, propiedades y otros
Ray
2
Creo que la respuesta de Jaider a continuación completa esta respuesta ya que yo mismo estaría interesado en el comando escrito y no en la solución del mouse.
Alwyn Schoeman
Otra forma ligeramente diferente de usar SSMS: haga clic con el botón derecho en el SP, haga clic en "Procedimiento almacenado de script como", luego haga clic en "EJECUTAR A". Esto le mostrará el TSQL.
John Gilmer
167

Puedes hacerlo :

declare @rowCount int
exec yourStoredProcedureName @outputparameterspOf = @rowCount output
farhad
fuente
77
No estaba diciendo 'SALIDA' al final. Siempre algo estúpido, gracias!
Milne
Me gusta evitar abrir diálogos en SSMS tanto como sea posible, así que esto fue perfecto.
ahwm
89

Devolver val del procedimiento

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
fuente
43

Compruebe esto, donde los dos primeros parámetros son parámetros de entrada y el tercero es el parámetro de salida en la definición del procedimiento.

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

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

Ejemplo:

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 esto ayude!

ajdams
fuente
26

Ejemplo de procedimiento:

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

Cómo llamar a este procedimiento

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

Primero, declare la variable de salida:

DECLARE @MyOutputParameter INT;

Luego, ejecute el procedimiento almacenado, y puede hacerlo sin los nombres de los parámetros, como este:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

o con los nombres de los parámetros:

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

Y finalmente, puede ver el resultado de salida haciendo un SELECT:

SELECT @MyOutputParameter 
Jaider
fuente
44
esta debería haber sido la respuesta elegida
anaval
9

¿Qué tal esto? Es extremadamente simplificado:

  1. El SPROC a continuación tiene un parámetro de salida de @ParentProductID

  2. Queremos seleccionar el valor de la salida de @ParentProductIDen el @MyParentProductIDque se declara a continuación.

  3. Aquí está el código:

    declare @MyParentProductID int
    
    exec p_CheckSplitProduct @ProductId = 4077, @ParentProductID =  @MyParentProductID output
    
    select @MyParentProductID
usuario1388325
fuente
7

> Intente esto funciona bien para el parámetro de salida múltiple:

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
Desarrollador de software Yashwant
fuente
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
fuente
3

Con esta consulta puede ejecutar cualquier procedimiento almacenado (con o sin parámetro de salida):

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

Aquí el tipo de datos de @temp debe ser el mismo que @ parameter3 dentro de SP.

Espero que esto ayude..

Materia oscura
fuente
Esto fue útil para mí. Gracias. No pensé en declarar la variable primero. Solo necesitaba ver un ejemplo de sintaxis. Esto fue.
Steven Johnson
1

Aquí está el procedimiento almacenado

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

Y aquí está la forma de ejecutar el procedimiento.

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

Consulte el siguiente ejemplo para obtener el valor de la variable de salida ejecutando un procedimiento almacenado.

    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
fuente
-1

Estoy usando el parámetro de salida en SQL Proc y luego usé estos valores en el conjunto de resultados.

ingrese la descripción de la imagen aquí

Ajeet Verma
fuente