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

つい先日、ここで「T-SQLのカーソルにパラメータは使えますか?」という質問をして、使えることがわかって解決したんですけど、
実際にプロシージャで使ってみると、カーソルから結果が返りません。
以下のように書いています。

CREATE PROCEDURE hoge(@param1 int) AS

DECLARE C1 CURSOR FOR
SELECT CODE_1 FROM TableA
WHERE COLUMN_1 = '0' AND COLUMN_2 = @param1

BEGIN
....

END

@param1をローカル変数に代入し、そのローカル変数をカーソルに書いても同じです。
また、カーソル定義の「@param1」をプロシージャ実行時の引数に渡していた数値に書き換えると結果は返ります。
T-SQLは初めてなもので原因が全く分かりません。
何が間違っているのでしょうか?

A 回答 (1件)

カーソル宣言の部分だけ書かれても、そのカーソルが正しく利用されているかは判断できません。



ストアドプロシジャでカーソルを利用する、簡単な例を以下に示します。

●表定義&データ例
create table t1
(c1 int,
c2 varchar(8))
insert into t1 values(1,'A')
insert into t1 values(1,'AA')
insert into t1 values(1,'AAA')
insert into t1 values(1,'AAAA')
insert into t1 values(2,'B')
insert into t1 values(2,'BB')
insert into t1 values(2,'BBB')

●ストアドプロシジャ
create procedure sp_hoge @ic1 int as
--カーソル使用例
declare @oc1 varchar(8)
declare @oc2 varchar(8)

--カーソル宣言
declare cr1 cursor for
select * from t1 where c1=@ic1

--カーソルオープン
open cr1

--FETCH(行の取り出し)
fetch next from cr1 into @oc1,@oc2

--LOOP

while (@@fetch_status <> -1) --エラーまたはEOFでない間
begin
if (@@fetch_status <> -2) --EOFでなければ何か処理をする
begin
print @oc2
end
--FETCH(行の取り出し)
fetch next from cr1 into @oc1,@oc2
end

--カーソルクローズ
close cr1

return
go

●ストアドプロシージャ実行
exec sp_hoge 1
go
    • good
    • 0
この回答へのお礼

私の単純なコーディングミスでした。

ありがとうございました。

お礼日時:2006/05/05 09:41

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

関連するカテゴリからQ&Aを探す