ストアドプロシージャにてフェッチから出ない
Aというテーブルの情報をカーソルにて取得し、
同じくAというテーブルに項目を変えてInsertするという
プロシージャを作成しています。
しかし、フェッチしたあとその処理から出ません。
(ちなみにフェッチ後のBEGIN~END内のInsert文を違うテーブルにして実行してみると処理から抜けました)
下記が該当プロシージャです。
CREATE PROCEDURE 販売プロシージャ AS
BEGIN
--変数宣言
DECLARE @販売NO INT
DECLARE @顧客NO INT
DECLARE @明細 NVARCHAR(25)
DECLARE @受注日 SMALLDATETIME
DECLARE @金額 INT
DECLARE @ステータス BIT
DECLARE @有効フラグ BIT
--カーソル宣言
DECLARE 販売カーソル CURSOR FOR
SELECT
販売NO,
顧客NO,
明細,
受注日,
金額,
ステータス,
有効フラグ
FROM 販売
WHERE YEAR(受注日) = YEAR(GETDATE())
AND MONTH(受注日) < MONTH(GETDATE())
--初期化処理
SET NOCOUNT OFF
--カーソルOPEN
OPEN 販売カーソル
FETCH NEXT FROM 販売カーソル
INTO
@販売NO,
@顧客NO,
@明細,
@受注日,
@金額,
@ステータス,
@有効フラグ
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO 販売 (
販売NO,
顧客NO,
明細,
受注日,
金額,
ステータス,
有効フラグ,
登録日,
更新日,
)VALUES(
@販売NO,
@顧客NO,
@明細,
@受注日,
@金額,
@ステータス,
@有効フラグ,
GETDATE(),
GETDATE(),
)
FETCH NEXT FROM 販売カーソル
INTO
@販売NO,
@顧客NO,
@明細,
@受注日,
@金額,
@ステータス,
@有効フラグ
END
CLOSE 販売カーソル
DEALLOCATE 販売カーソル
END
同じテーブルを使用する場合は、このような記述ではできないのでしょうか?
お礼
お礼が遅くなってしまい申し訳ありません。 参考URLなどを調べさせていただいて、どうやら@@CURSOR_ROWS で正確な値が取れるのは「同期カーソル」の状態でないといけないことがわかりました(意味あんまりわかってないですが``r(^^;)ぽりぽり) 今回はアドバイスどおり最初にセレクトして件数を取り出してから以降の処理を行いたいと思います。