リターン コードを使用したデータの返却
更新 : 2006 年 7 月 17 日
ストアド プロシージャは、プロシージャの実行状態を表すリターン コードという整数値を返すことができます。ストアド プロシージャのリターン コードを指定するには、RETURN ステートメントを使用します。OUTPUT パラメータと同様に、呼び出し側プログラムでリターン コードを使用するには、ストアド プロシージャの実行時にリターン コードを変数に保存する必要があります。たとえば、次のように、int データ型の代入変数 @result
を使用して、my_proc
ストアド プロシージャからのリターン コードを格納します。
DECLARE @result int;
EXECUTE @result = my_proc;
リターン コードは、可能性のあるエラー状態ごとにリターン コードの値を設定するために、ストアド プロシージャのフロー制御ブロックの中でよく使用されます。Transact-SQL ステートメントの後で @@ERROR 関数を使用すると、ステートメントの実行中にエラーが発生したかどうかを検出できます。
例
A. エラーの種類に基づいて異なるリターン コードを返す
次の例では、さまざまなエラーに特別なリターン コード値を設定するエラー処理を含む usp_GetSalesYTD
プロシージャを示します。次の表では、考えられる各エラーに対してストアド プロシージャによって割り当てられる整数値と、各値に相当する意味を示します。
リターン コードの値 | 意味 |
---|---|
0 |
実行に成功しました。 |
1 |
必要なパラメータ値が指定されていません。 |
2 |
指定されたパラメータ値が無効です。 |
3 |
売上高の値を取得中にエラーが発生しました。 |
4 |
販売員の売上高の値に NULL 値が検出されました。 |
USE AdventureWorks;
GO
IF OBJECT_ID('Sales.usp_GetSalesYTD', 'P') IS NOT NULL
DROP PROCEDURE Sales.usp_GetSalesYTD;
GO
CREATE PROCEDURE Sales.usp_GetSalesYTD
@SalesPerson nvarchar(50) = NULL, -- NULL default value
@SalesYTD money = NULL OUTPUT
AS
-- Validate the @SalesPerson parameter.
IF @SalesPerson IS NULL
BEGIN
PRINT 'ERROR: You must specify a last name for the sales person.'
RETURN(1)
END
ELSE
BEGIN
-- Make sure the value is valid.
IF (SELECT COUNT(*) FROM HumanResources.vEmployee
WHERE LastName = @SalesPerson) = 0
RETURN(2)
END
-- Get the sales for the specified name and
-- assign it to the output parameter.
SELECT @SalesYTD = SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.EmployeeID = sp.SalesPersonID
WHERE LastName = @SalesPerson;
-- Check for SQL Server errors.
IF @@ERROR <> 0
BEGIN
RETURN(3)
END
ELSE
BEGIN
-- Check to see if the ytd_sales value is NULL.
IF @SalesYTD IS NULL
RETURN(4)
ELSE
-- SUCCESS!!
RETURN(0)
END
-- Run the stored procedure without specifying an input value.
EXEC Sales.usp_GetSalesYTD;
GO
-- Run the stored procedure with an input value.
DECLARE @SalesYTDForSalesPerson money, @ret_code int;
-- Execute the procedure specifying a last name for the input parameter
-- and saving the output value in the variable @SalesYTD
EXECUTE Sales.usp_GetSalesYTD
N'Blythe', @SalesYTD = @SalesYTDForSalesPerson OUTPUT;
PRINT N'Year-to-date sales for this employee is ' +
CONVERT(varchar(10), @SalesYTDForSalesPerson);
B. ストアド プロシージャから返されるさまざまなリターン コードを処理する
次の例では、usp_GetSalesYTD
プロシージャから返されるリターン コードを処理するプログラムを作成します。
-- Declare the variables to receive the output value and return code
-- of the procedure.
DECLARE @SalesYTDForSalesPerson money, @ret_code int;
-- Execute the procedure with a title_id value
-- and save the output value and return code in variables.
EXECUTE @ret_code = Sales.usp_GetSalesYTD
N'Blythe', @SalesYTD = @SalesYTDForSalesPerson OUTPUT;
-- Check the return codes.
IF @ret_code = 0
BEGIN
PRINT 'Procedure executed successfully'
-- Display the value returned by the procedure.
PRINT 'Year-to-date sales for this employee is ' + CONVERT(varchar(10),@SalesYTDForSalesPerson)
END
ELSE IF @ret_code = 1
PRINT 'ERROR: You must specify a last name for the sales person.'
ELSE IF @ret_code = 2
PRINT 'EERROR: You must enter a valid last name for the sales person.'
ELSE IF @ret_code = 3
PRINT 'ERROR: An error occurred getting sales value.'
ELSE IF @ret_code = 4
PRINT 'ERROR: No sales recorded for this employee.'
GO
参照
概念
Transact-SQL での TRY...CATCH の使用
その他の技術情報
RETURN (Transact-SQL)
@@ERROR (Transact-SQL)
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2006 年 7 月 17 日 |
|