Eseguire la procedura memorizzata con un parametro Output?


197

Ho una procedura memorizzata che sto provando a testare. Sto provando a provarlo tramite SQL Management Studio. Per eseguire questo test, inserisco ...

exec my_stored_procedure 'param1Value', 'param2Value'

Il parametro finale è un output parameter. Tuttavia, non so come testare una procedura memorizzata con parametri di output.

Come posso eseguire una stored procedure con un parametro di output?

Risposte:


225

Il modo più semplice è quello di right-clicksulla procedurein SQL Server Management Studio (SSMS),

Selezionare execute stored procedure...

e aggiungi i valori per i parametri di input come richiesto.

SSMSgenererà quindi il codice per eseguire proc in una nuova finestra di query ed eseguirlo per voi. Puoi studiare il codice generato per vedere come viene fatto.


2
Conosco tutti gli altri modi possibili per eseguire la procedura memorizzata (come EXEC, chiamare da C # o PHP) ma questo è il modo più semplice e una persona non tecnica può farlo. quindi +1 per questo e grazie per la condivisione delle informazioni.
Dhaval,

Non ho un executecomando, il menu di scelta rapida ha solo un modify.
Akbari,

Sembra strano. Il mio menu di scelta rapida su una procedura memorizzata contiene circa una dozzina di elementi, tra cui modifica, esecuzione, proprietà e altro
Ray

2
Penso che la risposta di Jaider qui sotto completi questa risposta poiché io stesso sarei interessato al comando scritto e non alla soluzione del mouse.
Alwyn Schoeman,

Un altro modo leggermente diverso utilizzando SSMS: fare clic con il pulsante destro del mouse su SP, fare clic su "Script Stored Procedure as", quindi fare clic su "EXECUTE To". Questo ti mostrerà il TSQL.
John Gilmer,

167

Puoi farlo :

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

7
Non stavo dicendo "OUTPUT" alla fine. Sempre qualcosa di stupido, grazie!
Milne,

Mi piace evitare di aprire le finestre di dialogo in SSMS il più possibile, quindi è stato perfetto.
Ahwm,

89

Restituisce val dalla procedura

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 

43

Controllare questo, dove i primi due parametri sono parametri di input e il terzo è parametro di output nella definizione della procedura.

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

30

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

Esempio:

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

Spero che questo ti aiuti!


26

Esempio di procedura:

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

Come chiamare questa procedura

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

18

Innanzitutto, dichiara la variabile di output:

DECLARE @MyOutputParameter INT;

Quindi, esegui la procedura memorizzata e puoi farlo senza i nomi dei parametri, in questo modo:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

o con i nomi dei parametri:

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

E infine, puoi vedere il risultato dell'output facendo un SELECT:

SELECT @MyOutputParameter 

4
questa avrebbe dovuto essere la risposta scelta
anaval il

9

Cosa ne pensi di questo? È estremamente semplificato:

  1. Lo SPROC di seguito ha un parametro di output di @ParentProductID

  2. Vogliamo selezionare il valore della produzione di @ParentProductIDin @MyParentProductIDcui viene dichiarato sotto.

  3. Ecco il codice:

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

7

> Prova questo funziona benissimo per il parametro di output multiplo:

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

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

3

Con questa query è possibile eseguire qualsiasi procedura memorizzata (con o senza parametro di output):

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

Qui il tipo di dati di @temp dovrebbe essere uguale a @ parametro3 in SP.

Spero che questo ti aiuti..


Questo mi è stato utile. Grazie. Non pensavo di dichiarare prima la variabile. Ho solo bisogno di vedere un esempio di sintassi. Era questo.
Steven Johnson,

1

Ecco la procedura memorizzata

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

Ed ecco il modo di eseguire la procedura

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

1

Controllare l'esempio seguente per ottenere il valore della variabile di output eseguendo una procedura memorizzata.

    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'

-1

Sto usando il parametro di output in SQL Proc e successivamente ho usato questi valori nel gruppo di risultati.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.