T-SQLでは、これが許可されています。
DECLARE @SelectedValue int
SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
そのため、SELECTの値を取得して変数に入れることができます(明らかにスカラーである場合)。
ストアドプロシージャに同じ選択ロジックを配置した場合:
CREATE PROCEDURE GetMyInt
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
このストアドプロシージャの出力を取得して変数に入れることはできますか?
何かのようなもの:
DECLARE @SelectedValue int
SELECT @SelectedValue = EXEC GetMyInt
(試してみたので、上記の構文は許可されていません!)
使用できる方法は3つあります。RETURN値、およびOUTPUTパラメーターと結果セット
また、次のパターンを使用する場合は注意してください:SELECT @Variable=column FROM table ...
クエリから返された行が複数ある場合、@ Variableにはクエリによって返された最後の行の値のみが含まれます。
戻り値
少なくとも名前の付け方に基づいて、クエリはintフィールドを返すため。このトリックを使用できます:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
DECLARE @ReturnValue int
SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO
そして、次のようにプロシージャを呼び出します。
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue
これはINTでのみ機能します。RETURNは単一のint値のみを返すことができ、nullはゼロに変換されるためです。
出力パラメーター
出力パラメーターを使用できます。
CREATE PROCEDURE GetMyInt
( @Param int
,@OutValue int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
そして、次のようにプロシージャを呼び出します。
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue
出力パラメーターは1つの値のみを返すことができますが、任意のデータ型にすることができます
RESULT SET結果セットの場合、次のような手順を実行します。
CREATE PROCEDURE GetMyInt
( @Param int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
次のように使用します:
DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
EXEC GetMyInt @Param
SELECT * FROM @ResultSet
結果セットには、任意のデータ型の多くの行と列を含めることができます
組み合わせもあります。レコードセットで戻り値を使用できます。
-ストアドプロシージャ-
CREATE PROCEDURE [TestProc]
AS
BEGIN
DECLARE @Temp TABLE
(
[Name] VARCHAR(50)
)
INSERT INTO @Temp VALUES ('Mark')
INSERT INTO @Temp VALUES ('John')
INSERT INTO @Temp VALUES ('Jane')
INSERT INTO @Temp VALUES ('Mary')
-- Get recordset
SELECT * FROM @Temp
DECLARE @ReturnValue INT
SELECT @ReturnValue = COUNT([Name]) FROM @Temp
-- Return count
RETURN @ReturnValue
END
-呼び出しコード-
DECLARE @SelectedValue int
EXEC @SelectedValue = [TestProc]
SELECT @SelectedValue
- 結果 -
戻り値を使用する必要があります。
DECLARE @SelectedValue int
CREATE PROCEDURE GetMyInt (@MyIntField int OUTPUT)
AS
SELECT @MyIntField = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
次に、次のように呼び出します。
EXEC GetMyInt OUTPUT @SelectedValue
これを試してください:
EXEC @SelectedValue = GetMyInt