ストアドプロシージャの出力結果を格納する
SQL Serverでストアドプロシージャの出力結果を変数に格納する方法
SQL Serverでは、ストアドプロシージャの実行結果を直接変数に格納することができます。これには、主に以下の方法があります。
OUTPUT パラメータを使用する
最も一般的な方法は、ストアドプロシージャの定義に OUTPUT
パラメータを使用することです。このパラメータは、プロシージャの実行後に値が設定され、呼び出し側の変数に返されます。
CREATE PROCEDURE MyStoredProcedure
@InputParameter INT,
@OutputParameter INT OUTPUT
AS
BEGIN
-- ストアドプロシージャの処理
SET @OutputParameter = @InputParameter * 2;
END
DECLARE @Result INT;
EXEC MyStoredProcedure 5, @Result OUTPUT;
-- @Resultには10が格納されます
RETURN ステートメントを使用する
ストアドプロシージャから単一の値を返すには、RETURN
ステートメントを使用できます。この値は、呼び出し側の変数に格納されます。
CREATE PROCEDURE GetMaxValue
AS
BEGIN
DECLARE @MaxValue INT;
-- 最大値を取得する処理
SELECT @MaxValue = MAX(Value) FROM MyTable;
RETURN @MaxValue;
END
DECLARE @Max INT;
SET @Max = EXEC GetMaxValue;
-- @Maxには最大値が格納されます
SELECT ステートメントを使用して結果セットを返す
ストアドプロシージャから複数の値を返すには、SELECT
ステートメントを使用して結果セットを返します。その後、結果セットから必要な値を抽出することができます。
CREATE PROCEDURE GetMultipleValues
AS
BEGIN
SELECT Column1, Column2 FROM MyTable;
END
DECLARE @Result TABLE (Column1 INT, Column2 VARCHAR(50));
INSERT INTO @Result
EXEC GetMultipleValues;
-- @Resultには複数の値が格納されます
注意:
- 結果セットを返す場合は、
SELECT
ステートメントを使用し、結果を一時テーブルや変数に格納します。 RETURN
ステートメントは、ストアドプロシージャから単一の値を返すために使用します。OUTPUT
パラメータは、ストアドプロシージャの定義に指定する必要があります。
ストアドプロシージャの出力結果を変数に格納する:コード例解説
CREATE PROCEDURE MyStoredProcedure
@InputParameter INT,
@OutputParameter INT OUTPUT
AS
BEGIN
-- ストアドプロシージャの処理
SET @OutputParameter = @InputParameter * 2;
END
解説:
- @OutputParameter OUTPUT: プロシージャから呼び出し元に返す出力値。
OUTPUT
キーワードを指定することで、このパラメータは出力パラメータとして扱われます。 - @InputParameter: プロシージャに渡す入力値。
DECLARE @Result INT;
EXEC MyStoredProcedure 5, @Result OUTPUT;
-- @Resultには10が格納されます
- EXEC MyStoredProcedure 5, @Result OUTPUT: ストアドプロシージャ
MyStoredProcedure
を実行し、入力値として5
を渡します。出力結果は@Result
に格納されます。 - DECLARE @Result INT: 呼び出し側で、出力結果を格納するための変数
@Result
を宣言します。
動作:
- プロシージャが実行され、入力値
5
が@InputParameter
に代入されます。 - プロシージャ内で、
@OutputParameter
に@InputParameter * 2
の計算結果が代入されます。つまり、@OutputParameter
には10
が格納されます。 - プロシージャの実行が終了すると、
@OutputParameter
の値が呼び出し側の@Result
にコピーされます。
CREATE PROCEDURE GetMaxValue
AS
BEGIN
DECLARE @MaxValue INT;
-- 最大値を取得する処理
SELECT @MaxValue = MAX(Value) FROM MyTable;
RETURN @MaxValue;
END
- RETURN @MaxValue: プロシージャから単一の値
@MaxValue
を返します。
DECLARE @Max INT;
SET @Max = EXEC GetMaxValue;
-- @Maxには最大値が格納されます
- SET @Max = EXEC GetMaxValue: ストアドプロシージャ
GetMaxValue
を実行し、その戻り値を@Max
に代入します。
- プロシージャが実行され、
MyTable
テーブルのValue
列の最大値が@MaxValue
に代入されます。 RETURN @MaxValue
によって、@MaxValue
の値が呼び出し元に返されます。
CREATE PROCEDURE GetMultipleValues
AS
BEGIN
SELECT Column1, Column2 FROM MyTable;
END
DECLARE @Result TABLE (Column1 INT, Column2 VARCHAR(50));
INSERT INTO @Result
EXEC GetMultipleValues;
-- @Resultには複数の値が格納されます
INSERT INTO @Result EXEC GetMultipleValues;
で、ストアドプロシージャの実行結果を@Result
テーブルに挿入します。@Result
は、ストアドプロシージャの出力結果を格納するためのテーブル変数です。
- プロシージャが実行され、
MyTable
テーブルのColumn1
とColumn2
の値が結果セットとして返されます。 - この結果セットが
@Result
テーブルに挿入されます。
- SELECT ステートメント: 複数の値(結果セット)を出力する際に使用。
- RETURN ステートメント: 単一の値を出力する際に使用。
- OUTPUT パラメータ: 単一の値を出力する際に使用。
選択のポイント:
- 複数の値を返す場合は、
SELECT
ステートメント。 - 返す値が1つの場合は、
OUTPUT
パラメータまたはRETURN
ステートメント。
- 結果セットを返す際の注意点: 結果セットの構造が複雑な場合、処理が複雑になることがあります。
- 出力パラメータとRETURNの併用: 厳密には避けるべきですが、状況によっては併用することも可能です。
- SQL Serverのバージョンによって、細かい文法や機能が異なる場合があります。
- 上記のコード例は基本的なものです。実際の開発では、エラー処理やパフォーマンスチューニングなどを考慮する必要があります。
テーブル変数を使用する
ストアドプロシージャ内でテーブル変数を定義し、その変数に結果を格納して返すことができます。
CREATE PROCEDURE GetEmployeeData
AS
BEGIN
DECLARE @EmployeeTable TABLE (
EmployeeID INT,
FirstName NVARCHAR(50),
LastName NVARCHAR(50)
);
INSERT INTO @EmployeeTable
SELECT EmployeeID, FirstName, LastName FROM Employees;
SELECT * FROM @EmployeeTable;
END
DECLARE @ResultTable TABLE (
EmployeeID INT,
FirstName NVARCHAR(50),
LastName NVARCHAR(50)
);
INSERT INTO @ResultTable
EXEC GetEmployeeData;
SELECT * FROM @ResultTable;
一時テーブルを使用する
sql sql-server variables