プロが教えるわが家の防犯対策術!

こんにちわ。
いま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を出力パラメータに渡す方法がわかりません。
初歩的なことかもしれませんが,
教えてください。よろしくお願いします。

A 回答 (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')
    • good
    • 0
この回答へのお礼

chukenkenkouさん
大変わかりやく教えて頂きまして,ありがとうございます。
教えて頂いた方法でoutパラメータを取得できました。
@RowCountはおっしゃる通り,@@RowCountをセットしまして,
1件しかヒットしないです。
なおサンプル例も付けて頂き,大変参考になりました。

お礼日時:2006/08/10 17:38

私の知る限り、ストアドプロシージャは戻り値を持ちません。

したがって、ストアドプロシージャが終了してしまうと結果はきえてしまいます。
(件数はシステム変数から獲得した、と推測しているので。間違っていたら、ご指摘ください。)

ストアドファンクションならreturnで値を返せるので、こちらを使ってはいかがでしょう?

# ストアドファンクションはテーブルの構成に影響を与えるSQL文は実行できない、という制約があったと記憶していますが、今回はSELECTなので問題はないでしょう。
    • good
    • 0
この回答へのお礼

SSMSEさん
回答ありがとうございました。

お礼日時:2006/08/10 17:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!