- ベストアンサー
SQLServerのストアドで戻り値取得したい。
こんにちわ。 いまSQLServer2005でストアドを作成しています。 あるテーブルをSELECTして,あるカラムと件数の両方を出力パラメータに取得したいのですが, 件数は取得できるのですが,カラムが取得できません。 ちなみに下記のようなコードになります。 create procedure funLoginCheck (@UserID char(5), @PassWord varchar(10), @RowCount int output, @DeptID char(2) output) as select * from MST_Employee where EmployeeID = @UserID And PassWord = @PassWord; set @deptid = deptid」 deptidを出力パラメータに渡す方法がわかりません。 初歩的なことかもしれませんが, 教えてください。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>deptidを出力パラメータに渡す方法 select @deptid=deptid from MST_Employee where EmployeeID = @UserID And PassWord = @PassWord という方法で渡せます。 ところで、この条件でヒットするのは1行だけなのでは? パラメタ=@RowCountの目的が、よく分かりませんが? それに今の記述では、@RowCountには何も設定されていません。システムから返される@@ROWCOUNTの内容を、設定したいのでしょうか? プロシジャとファンクションの定義と実行例を、参考までに示します。 1.プロシジャ (1)定義 create procedure dbo.funLoginCheck (@UserID char(5), @PassWord varchar(10), @RowCount int output, @DeptID char(2) output) as select @DeptID=deptid from MST_Employee where EmployeeID=@UserID And PassWord=@PassWord set @RowCount=@@ROWCOUNT (2)実行 declare @dept char(2) declare @rowcnt int exec dbo.funLoginCheck @UserID='U1',@PassWord='P1', @RowCount=@rowcnt output,@DeptID=@dept output select @rowcnt,@dept 2.ファンクション (1)定義 create function dbo.funLoginCheck (@UserID char(5), @PassWord varchar(10)) returns char(2) begin declare @DeptID char(2) select @DeptID=deptid from MST_Employee where EmployeeID=@UserID And PassWord=@PassWord return @DeptID end (2)実行 select dbo.funLoginCheck('U2','P2')
その他の回答 (1)
- SSMSE
- ベストアンサー率66% (12/18)
私の知る限り、ストアドプロシージャは戻り値を持ちません。したがって、ストアドプロシージャが終了してしまうと結果はきえてしまいます。 (件数はシステム変数から獲得した、と推測しているので。間違っていたら、ご指摘ください。) ストアドファンクションならreturnで値を返せるので、こちらを使ってはいかがでしょう? # ストアドファンクションはテーブルの構成に影響を与えるSQL文は実行できない、という制約があったと記憶していますが、今回はSELECTなので問題はないでしょう。
お礼
SSMSEさん 回答ありがとうございました。
お礼
chukenkenkouさん 大変わかりやく教えて頂きまして,ありがとうございます。 教えて頂いた方法でoutパラメータを取得できました。 @RowCountはおっしゃる通り,@@RowCountをセットしまして, 1件しかヒットしないです。 なおサンプル例も付けて頂き,大変参考になりました。