RETURN (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

クエリまたはプロシージャを無条件で終了します。 RETURN は即時に実行され、完了します。また、プロシージャ、バッチ、またはステートメント ブロックを終了する任意の位置で使用できます。 RETURN の後に続くステートメントは実行されません。

Transact-SQL 構文表記規則

構文

RETURN [ integer_expression ]   

引数

integer_expression
返される整数値です。 ストアド プロシージャは、呼び出しプロシージャまたはアプリケーションに整数値を返すことができます。

戻り値の型

必要に応じて int を返します。

注意

特に記述がない限り、すべてのシステム ストアド プロシージャでは値 0 が返されます。 これは成功を示し、0 以外の値は失敗を示します。

解説

ストアド プロシージャと一緒に使用する場合、RETURN は NULL 値を返すことができません。 プロシージャが NULL 値を返そうとすると (たとえば、@status の値が NULL のときに RETURN @status を使用)、警告メッセージが生成されて値 0 が返されます。

現在のプロシージャを実行したバッチまたはプロシージャの中の後続の Transact-SQL ステートメントに、返されたステータス値を指定できます。この場合、EXECUTE @return_status = <procedure_name> の形式で入力する必要があります。

A. プロシージャを終了する

次の例では、findjobs を実行するときにユーザー名がパラメーターとして指定されていない場合、ユーザーの画面にメッセージを出力後、RETURN でプロシージャを終了します。 ユーザー名が指定された場合は、そのユーザーが現在のデータベースに作成したすべてのオブジェクトの名前が、適切なシステム テーブルから取得されます。

CREATE PROCEDURE findjobs @nm sysname = NULL  
AS   
IF @nm IS NULL  
    BEGIN  
        PRINT 'You must give a user name'  
        RETURN  
    END  
ELSE  
    BEGIN  
        SELECT o.name, o.id, o.uid  
        FROM sysobjects o INNER JOIN master..syslogins l  
            ON o.uid = l.sid  
        WHERE l.name = @nm  
    END;  

B. ステータス コードを返す

次の例では、指定した連絡先の ID の状態をチェックします。 状態が Washington (WA) である場合は、1 の状態が返されます。 2WA 以外の値であったり、StateProvince が行に一致しないなど、それ以外のすべての場合は、ContactID を返します。

USE AdventureWorks2022;  
GO  
CREATE PROCEDURE checkstate @param VARCHAR(11)  
AS  
IF (SELECT StateProvince FROM Person.vAdditionalContactInfo WHERE ContactID = @param) = 'WA'  
    RETURN 1  
ELSE  
    RETURN 2;  
GO  

次の例では、checkstate を実行して得られる戻りステータスを示します。 最初は Washington の連絡先、2 つ目は Washington 以外の連絡先、3 つ目は有効でない連絡先を示しています。 @return_status ローカル変数は、これを宣言してからでないと使用できません。

DECLARE @return_status INT;  
EXEC @return_status = checkstate '2';  
SELECT 'Return Status' = @return_status;  
GO  

結果セットは次のとおりです。

Return Status 
 
------------- 
 
1

別の連絡先番号を指定して、クエリを再び実行します。

DECLARE @return_status INT;  
EXEC @return_status = checkstate '6';  
SELECT 'Return Status' = @return_status;  
GO  

結果セットは次のとおりです。

Return Status  
-------------  
 
2

別の連絡先番号を指定して、クエリを再び実行します。

DECLARE @return_status INT  
EXEC @return_status = checkstate '12345678901';  
SELECT 'Return Status' = @return_status;  
GO  

結果セットは次のとおりです。

Return Status  
-------------  
 
2

参照

ALTER PROCEDURE (Transact-SQL)
CREATE PROCEDURE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
EXECUTE (Transact-SQL)
SET @local_variable (Transact-SQL)
THROW (Transact-SQL)