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

Каков ваш вопрос? –

ответ

2

Хранимые процедуры не принято «возвращать значения» - это то, что вы сохранили функции для.

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 

Вы можете вызвать эту хранимую функцию как это:

SELECT dbo.CalculateSomething(value_for_emp_code, value_for_co_id) 

и получить обратно DECIMAL (8,2) из ​​расчета.

Хранимые процедуры возвращают количество строк, на которые влияет их действие - INT.

Если вам нужно вернуть значение из хранимой процедуры, вам необходимо использовать тип параметра OUTPUT и использовать технику, которую показывает AdaTheDev - вам нужно получить выходное значение в переменной.

5

Чтобы вызвать этот sproc и получить выходной параметр, вы (например):

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

Update:

Вам не нужно использовать RETURN - вы правы в том, что RETURN может возвращать только INTEGER. Но возвращаемое значение отличается от параметра OUTPUT, который вы фактически используете.

т.е. получить значение возврата из sproc, отличается синтаксис:

DECLARE @Result INTEGER 
EXECUTE @Result = SomeSproc 
+0

Мне нужно вернуть десятичное значение. Это выходное значение будет intger при использовании return @p ...... что я могу сделать, чтобы вернуть десятичное значение – shmandor

+1

@shmandor - см. Обновление в моем ответе – AdaTheDev

0

Сначала вы можете использовать не хранимую процедуру с помощью функции, если вы должны возвращать одно значение, основываясь на входных параметрах

Если зр обратный десятичный, когда вам нужно целое число - просто бросить: SELECT (CAST @d AS INT), но это очень опасно (возможно переполнение типа)

+0

Мне нужно вернуть десятичную значение из sp. это возможно – shmandor

+1

@shmandor: вы текущий sp имеет десятичный выходной параметр. этого недостаточно? @ Ответ AdaTheDev о том, как правильно использовать его. Параметр объявляется десятичным, а переменная объявляется десятичной. nowhere int – abatishchev

0

Если tran_value Колонка имеет десятичный тип, @p будет иметь десятичные значения после выполнения запроса ...

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 

Выход

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

Примечание: Вам не нужно иметь сделать что-либо конкретное, чтобы вернуть значение из хранимой процедуры через выходной параметр ... Просто назначьте значение для параметра вывода внутри вашего SP, оно будет автоматически возвращено вызывающему.

Это означает, что ваш SP правильно даже без возвращения заявления