こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

T-SQLのカーソルで

つい先日、ここで「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は初めてなもので原因が全く分かりません。
何が間違っているのでしょうか?

投稿日時 - 2006-05-04 18:32:28

QNo.2130890

すぐに回答ほしいです

質問者が選んだベストアンサー

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

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

●表定義&データ例
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

投稿日時 - 2006-05-05 04:27:17

お礼

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

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

投稿日時 - 2006-05-05 09:41:26

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問