[解決済み] T-SQL ストアドプロシージャのSELECTされた値を取得する
2023-01-18 12:33:59
質問
T-SQLでは、これは許可されています。
DECLARE @SelectedValue int
SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
つまり、SELECTの値を取得して変数に詰め込むことは可能です(当然スカラーであることが条件ですが)。
同じSELECTのロジックをストアドプロシージャに入れたら
CREATE PROCEDURE GetMyInt
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
このストアドプロシージャの出力を取得して変数に詰め込むことは可能でしょうか?
のようなものです。
DECLARE @SelectedValue int
SELECT @SelectedValue = EXEC GetMyInt
(上の構文が許されないことは、私が試したので知っています!)
どのように解決するのですか?
RETURN値、OUTPUTパラメータ、結果セットの3つの方法があります。
ALSO、パターンを使用する場合は注意してください。
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
RETURNは単一のint値しか返せず、nullは0に変換されるため、これはintに対してのみ機能します。
出力パラメータ
を使うと、出力パラメータを使うことができます。
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つの値しか返すことができませんが、任意のデータ型にすることができます。
結果セット のようなプロシージャを作成します。
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
結果セットは多くの行と多くの列を持つことができ、そのデータ型は問いません。
関連
-
[解決済み] T-SQL CASE句。WHEN NULLの指定方法
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL ServerにおけるLEFT JOINとLEFT OUTER JOINの比較
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] SQL Serverにおける関数とストアドプロシージャの比較
-
[解決済み] INTからVARCHARへの変換 SQL
-
[解決済み】SQL Server。クエリーは高速ですが、プロシージャから遅い
-
[解決済み] T-SQLストアドプロシージャでオプションのパラメータを使用するにはどうすればよいですか?
-
[解決済み] sp_executesqlの結果を変数に取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] T-SQL CASE句。WHEN NULLの指定方法
-
[解決済み] TSQLで改行文字を置換する
-
[解決済み】T-SQLのCASE句。WHEN NULLを指定する方法
-
[解決済み] sp_executesqlの結果を変数に取得する方法は?
-
[解決済み] T-SQL - デフォルトのパラメータを持つ関数
-
[解決済み] バッチ」とは何か、なぜ「GO」が使われるのか?
-
[解決済み] Microsoft tSQL で行が見つからなかった場合に値を返します。
-
[解決済み] 関数がすでに存在する場合、その関数を削除するにはどうすればよいですか?
-
[解決済み] データベース内の任意のテーブルの任意のカラムにある1つの値を検索する。
-
[解決済み] カンマを区切り文字として複数行を1行に変換する[重複]。