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
ответ
Хранимые процедуры не принято «возвращать значения» - это то, что вы сохранили функции для.
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 - вам нужно получить выходное значение в переменной.
Чтобы вызвать этот 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
Сначала вы можете использовать не хранимую процедуру с помощью функции, если вы должны возвращать одно значение, основываясь на входных параметрах
Если зр обратный десятичный, когда вам нужно целое число - просто бросить: SELECT (CAST @d AS INT)
, но это очень опасно (возможно переполнение типа)
Мне нужно вернуть десятичную значение из sp. это возможно – shmandor
@shmandor: вы текущий sp имеет десятичный выходной параметр. этого недостаточно? @ Ответ AdaTheDev о том, как правильно использовать его. Параметр объявляется десятичным, а переменная объявляется десятичной. nowhere int – abatishchev
Если 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 правильно даже без возвращения заявления
Каков ваш вопрос? –