1
ALTER PROCEDURE dbo.StoredProcedure8 
@emp_code bigint, 
@co_id bigint, 
@p decimal(8,2) output 

AS 

SELECT @p = (select sum(tran_value) from emp_ded_ben_trans where [email protected]_code and [email protected]_id and period_flg=2 and tax_flg=0) 

RETURN 
+6

Quelle est votre question? –

Répondre

2

Les procédures stockées ne sont pas faits pour « retour des valeurs » - c'est ce que vous avez enregistré des fonctions pour.

CREATE FUNCTION dbo.CalculateSomething 
    (@emp_code bigint, @co_id bigint) 
RETURNS DECIMAL(8, 2) 
AS BEGIN  
    RETURN 
     (SELECT SUM(tran_value) 
     FROM dbo.emp_ded_ben_trans 
     WHERE 
      emp_code = @emp_code AND co_id = @co_id 
      AND period_flg = 2 AND tax_flg = 0) 
END 

Vous pouvez ensuite appeler cette fonction stockée comme ceci:

SELECT dbo.CalculateSomething(value_for_emp_code, value_for_co_id) 

et retourner un DECIMAL (8,2) du calcul.

Les procédures stockées renvoient le nombre de lignes affectées par leur opération - un INT.

Si vous devez renvoyer une valeur à partir d'un proc stocké, vous devez utiliser le type de paramètre OUTPUT et utiliser la technique indiquée par AdaTheDev - vous devez saisir la valeur de sortie dans une variable.

5

Pour appeler que sproc et récupérer le paramètre de sortie, vous faites (par exemple):

DECLARE @p DECIMAL(8,2) 
EXECUTE dbo.StoredProcedure8 123, 456, @p OUTPUT 
-- @p now contains the output value 

Mise à jour:

Vous n'avez pas besoin d'utiliser RETURN - Vous avez raison en ce qu'un RETURN ne peut retourner un INTEGER. Mais une valeur de retour est différente d'un paramètre OUTPUT qui est ce que vous utilisez réellement.

-à-dire pour obtenir une valeur de retour d'une procédure stockée, est une syntaxe différente:

DECLARE @Result INTEGER 
EXECUTE @Result = SomeSproc 
+0

je dois retourner la valeur décimale. Cette valeur de sortie être intger quand utilisation retourner @p ...... que puis-je faire pour retourner la valeur décimale – shmandor

+1

@shmandor - s'il vous plaît voir la mise à jour dans ma réponse – AdaTheDev

0

D'abord, vous pouvez pas utiliser une procédure stockée par une fonction si vous devez renvoyer une valeur unique basant sur les paramètres d'entrée

Si votre sp décimale de retour lorsque vous avez besoin entier - il suffit de lancer: SELECT (CAST @d AS INT) mais cela est très dangereux (dépassement possible de type)

+0

je dois retourner décimal valeur de sp. sont possibles – shmandor

+1

@shmandor: votre sp actuel a un paramètre de sortie décimale. n'est-ce pas suffisant? La réponse d'AdaTheDev est de savoir comment l'utiliser correctement. param est déclaré comme décimal et la variable est déclarée comme décimale. nulle part int – abatishchev

0

Si votre colonne tran_value est de type décimal, la @p aura des valeurs décimales après l'exécution de la requête ...

Create Table #test 
(ID1 Int, 
ID2 Decimal(8,2) 
) 

Insert into #test Values (1,1.1) 
Insert into #test Values (2,2.2) 
Insert into #test Values (3,3.3) 

Declare @p Decimal(8,2), @intp int 

Select @intp = Sum(ID1), @p = Sum(ID2) from #test 

Select @intp as IntegerSum, @p as DecimalSum 

Drop Table #test 

Sortie

IntegerSum DecimalSum 
----------- --------------------------------------- 
6   6.60 

Remarque: Vous ne devez pas avoir faire quelque chose de spécifique pour renvoyer la valeur de Stored Procedure via le paramètre de sortie ... Affectez juste la valeur au paramètre de sortie dans votre SP, il sera automatiquement renvoyé à l'appelant.

Cela signifie que votre SP est correcte, même sans la déclaration de retour

Questions connexes