0

SSMS で exec ストアド プロシージャ コマンドを実行すると、次のスクリプトが生成されます。

USE [MY_DB]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[usr_DailyReportsEmpty]
        @username = N'someuser'

SELECT  'Return value' = @return_value

GO

しかし、スクリプトを実行すると、EXEC は 16 を返し、SELECT は 0 を返します。なぜですか?

4

3 に答える 3

4

取得する値を明示的に RETURN するように手順を変更する必要があります。Barry Kaye が前述したように、単に値を選択して結果セットを返すと、プロシージャは成功の場合は 0 を返しますが、RETURN ステートメントを使用すると、プロシージャはその値を返します。

次の例では、最初のプロシージャが実行されたときに結果セットとして 1 が選択されますが、@return1 でキャプチャされた値は成功の場合は 0 になります。2 番目のプロシージャには結果セットがなく、@return2 でキャプチャされた値は 3 になります。

CREATE PROCEDURE Test1
AS
    SELECT 1;
GO

CREATE PROCEDURE Test2
AS
    RETURN 3;
GO

DECLARE @return1 INT, @return2 INT;
EXEC @return1 = Test1;
EXEC @return2 = Test2;
于 2012-05-11T16:23:32.210 に答える
2

SQL Server ではEXEC、ストアド プロシージャの場合、RETURN_VALUE は通常、成功または失敗を示します。通常、0 (ゼロ) は成功を意味します。SELECTステートメントの結果と同じではありません。したがって、SP はSELECT5 かもしれませんがRETURN_VALUE、SP がエラーなしで実行されたことを示す 0 を受け取ります。

于 2012-05-11T16:15:44.533 に答える
0

特に戻りたい値が整数でない場合は、出力変数を使用することもできます。

于 2012-05-11T19:47:57.100 に答える