- ベストアンサー
T-SQLのカーソルで結果が返らない問題
- T-SQLのカーソルを使用している際に、結果が返らない問題が発生しています。カーソルにパラメータを使用している場合、結果が返らない可能性があります。プロシージャでカーソルを使用する際には、パラメータをローカル変数に代入してカーソルに書き込むことができますが、それでも結果が返らないかもしれません。
- また、カーソル定義の「@param1」を実行時の引数に置き換えると結果が返ります。原因は正確には分かっていませんが、T-SQLの初心者であるため、何か間違いがある可能性があります。質問者が問題を再現できるようにカーソルの使用方法やパラメータの扱い方について説明し、問題の原因を特定するための手助けをすることが求められます。
- 質問者はT-SQLのカーソルについて初心者であり、結果が返らない問題に困っています。カーソルにパラメータを使用し、プロシージャ内でカーソルを実行する際に結果が返らないという現象が発生しており、原因が分からないため問題解決が難しい状況です。質問者が提供したコードに基づいて問題を分析し、カーソルの使用方法やパラメータの扱い方などを解説する必要があります。
- みんなの回答 (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
お礼
私の単純なコーディングミスでした。 ありがとうございました。