2009-10-19 22 views
138

Tengo un procedimiento almacenado que estoy tratando de probar. Estoy intentando probarlo a través de SQL Management Studio. Con el fin de ejecutar esta prueba entro ...¿Ejecutar el procedimiento almacenado con un parámetro de salida?

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?

Respuesta

173

La manera más fácil es right-click en el SQL procedure en Server Management Studio (SSMS),

seleccione execute stored procedure...

y añadir valores para los parámetrosde entrada cuando se le solicite.

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

+1

Sé que todas las otras formas posibles de ejecutar procedimiento almacenado (como EXEC, llamando desde C# o PHP) pero esta es la la persona más fácil y no técnica puede hacer esto. entonces +1 para esto y para compartir la información. – Dhaval

+0

No tengo un comando 'execute', el menú contextual solo tiene' modify'. – Akbari

+0

Eso parece extraño. Mi menú contextual en un procedimiento almacenado tiene aproximadamente una docena de elementos, incluyendo modificar, ejecutar, propiedades y otros – Ray

27

De 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, 
@[email protected], 
@[email protected] OUTPUT,@[email protected] OUTPUT 

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

Espero que esto ayude!

122

usted puede hacer esto:

declare @rowCount int 
exec yourStoredProcedureName @outputparameterspOf = @rowCount output 
+1

No estaba diciendo 'OUTPUT' al final. Siempre algo estúpido, ¡Gracias! – Milne

+0

Me gusta evitar abrir diálogos en SSMS tanto como sea posible, así que esto fue perfecto. – ahwm

65

Volver 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 
32

comprobar esto, Cuando dos primeros parámetros son parámetros de entrada y tercero es el parámetro de salida en Definición del procedimiento.

DECLARE @PK_Code INT; 
EXEC USP_Validate_Login 'ID', 'PWD', @PK_Code OUTPUT 
SELECT @PK_Code 
9

¿Qué le parece esto? Es extremadamente simplificada:

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

  2. Queremos seleccionar el valor de la salida de @ParentProductID en @MyParentProductID que se declara a continuación.

  3. Aquí está el código:

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

> Probar su trabajo muy 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'[email protected],'password'[email protected] 
9

Procedimiento Ejemplo:

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].[text] 'Abhishek',@ID OUTPUT 
PRINT @ID 
+0

Comentario pequeño: llama al SP: [dbo]. [Test] sin embargo, cuando lo llama [dbo]. [Text], esto es un error tipográfico. por favor, arregla – leeroya

3
CREATE PROCEDURE DBO.MY_STORED_PROCEDURE 
(@PARAM1VALUE INT, 
@PARAM2VALUE INT, 
@OUTPARAM VARCHAR(20) OUT) 
AS 
BEGIN 
SELECT * FROM DBO.PARAMTABLENAME WHERE [email protected] 
END 

DECLARE @OUTPARAM2 VARCHAR(20) 
EXEC DBO.MY_STORED_PROCEDURE 1,@OUTPARAM2 OUT 
PRINT @OUTPARAM2 
4

En primer lugar, declarar la variable de salida:

DECLARE @MyOutputParameter INT; 

A continuación, ejecute el procedimiento almacenado, y usted puede hacerlo sin los nombres de los parámetros, así:

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, por último, se puede ver el resultado de la salida haciendo una SELECT:

SELECT @MyOutputParameter 
Cuestiones relacionadas