web-dev-qa-db-fra.com

Comment déclarer des paramètres d'entrée-sortie dans une procédure/fonction stockée SQL Server?

Dans Oracle, 

Nous pouvons déclarer un paramètre d'entrée-sortie (pas seulement une entrée ou sortie) comme suit:

Create Or Replace Procedure USERTEST.SimpleInOutProcedure(
    p_InputInt Int,
    p_OutputInt out Int,
    p_InputOutputInt in out Int
) AS
BEGIN
    p_OutputInt := p_InputInt + 1;
    p_InputOutputInt := p_InputOutputInt + p_InputOutputInt;
END;

Cependant, lorsque j'essaie de le déclarer dans SQL Server, le script ne compilerait pas:

create procedure SimpleInOutProcedure 
    @p_InputInt int, @p_OutputInt int input output
As
Begin
    Select * from TestTableCommonA;
End

Le mot "entrée" n'est pas attendu, donc pas de couleur bleue dans SQL Server Management Studio:

 enter image description here

Qu'est-ce qui ne va pas dans mon script? Comment déclarer les paramètres d'entrée-sortie dans SQL Server Stored Procedure/Function?

Je souhaite le faire car je dois créer un lecteur "équivalent" pour la base de données SQL Server, créé précédemment pour la base de données Oracle et disposant du lecteur pour les paramètres d'entrée/sortie.

4
Ian

Si vous déclarez un paramètre en tant que OUTPUT, il agit à la fois en entrée et en sortie.

CREATE PROCEDURE SimpleInOutProcedure 
(
    @p_InputInt  INT,
    @p_OutputInt INT OUTPUT
)
AS
BEGIN
    SELECT 
       @p_OutputInt = @p_OutputInt
END
GO

DECLARE @p_OutputInt int = 4
EXEC SimpleInOutProcedure @p_InputInt = 1, @p_OutputInt = @p_OutputInt OUTPUT
SELECT @p_OutputInt
10

Ceci est un exemple de code pour le paramètre SQL Input & Output.

CREATE PROCEDURE [dbo].[sample_Insert]
@name varchar(500),
@entryby int,
@RetVal INT = 0 OUT

AS

SET NOCOUNT ON



INSERT INTO dbo.Master
        ( name ,
          entry_date ,
          entry_by
        )
VALUES  ( @name , -- service_name - varchar(1000)
          dbo.GetActDate() , -- entry_date - datetime
          @entryby  -- entry_by - int
        )




IF @@ERROR =  0
BEGIN
SET @RetVal = 1 -- 1 IS FOR SUCCESSFULLY EXECUTED
End
ELSE
BEGIN
SET @RetVal = 0 -- 0 WHEN AN ERROR HAS OCCURED
End

 set ANSI_NULLS ON
 set QUOTED_IDENTIFIER ON
0
ravi polara