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
Répondre
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.
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
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)
je dois retourner décimal valeur de sp. sont possibles – shmandor
@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
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
Quelle est votre question? –