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 emp_code=@emp_code and co_id=@co_id and period_flg=2 and tax_flg=0)

RETURN  
4

4 に答える 4

5

そのsprocを呼び出して出力パラメータを取得するには、次のようにします(例)。

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

アップデート:

使用する必要はありませんRETURN-あなたはRETURNINTEGERしか返すことができないという点で正しいです。ただし、戻り値は、実際に使用しているOUTPUTパラメーターとは異なります。

つまり、sprocからRETURN値を取得するには、構文が異なります。

DECLARE @Result INTEGER
EXECUTE @Result = SomeSproc
于 2010-08-05T07:19:29.657 に答える
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 が示す手法を使用する必要があります。出力値を変数に取り込む必要があります。

于 2010-08-05T07:42:58.083 に答える
0

まず、入力パラメーターに基づいて単一の値を返す必要がある場合は、関数によってストアド プロシージャを使用できません。

整数が必要なときにspが小数を返す場合-キャストするだけです:SELECT (CAST @d AS INT)しかし、これは非常に危険です(型オーバーフローの可能性があります)

于 2010-08-05T07:30:00.497 に答える
0

列 tran_value が 10 進数タイプの場合、クエリを実行した後、@p は 10 進数値になります...

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内の出力パラメータに値を割り当てるだけで、呼び出し元に自動的に返されます。

これは、return ステートメントがなくても SP が正しいことを意味します

于 2010-08-05T07:51:20.673 に答える