前提・実現したいこと
ストアドで動的カーソルを使用し、レコードの更新をしたい
発生している問題・エラーメッセージ
16929:カーソルは読み取り専用です。のエラー発生
該当のソースコード
DECLARE @SQL varchar(max);
BEGIN TRY
SET @SQL = N'';
SET @SQL = @SQL + N' SELECT A.CODE,';
SET @SQL = @SQL + N' A.NAME,';
SET @SQL = @SQL + N' B.GROUP';
SET @SQL = @SQL + N' FROM A,';
SET @SQL = @SQL + N' B';
SET @SQL = @SQL + N' WHERE B.GROUP = ' + CONVERT(varchar,12345);
SET @SQL = @SQL + N' AND A.CODE = B.CODE';
SET @SQL = @SQL + N' ORDER BY'; SET @SQL = @SQL + N' A.CODE,'; SET @SQL = @SQL + N' A.NAME,'; SET @SQL = @SQL + N' B.GROUP'; SET @SQL = @SQL + N' FOR UPDATE OF'; SET @SQL = @SQL + N' A.No,'; SET @SQL = @SQL + N' A.RowNo'; EXECUTE (' DECLARE C_TEST CURSOR FOR ' + @SQL); OPEN C_TEST; FETCH NEXT FROM C_TEST INTO @REC_CODE, @REC_NAME, @REC_GROUP; WHILE @@FETCH_STATUS = 0 BEGIN UPDATE SET No = 1, RowNo = 1 WHERE CURRENT OF C_TEST; FETCH NEXT FROM C_TEST INTO @REC_CODE, @REC_NAME, @REC_GROUP; END --カーソルクローズ CLOSE C_TEST; DEALLOCATE C_TEST; END TRY
試したこと
動的カーソルを使用し、AテーブルのNoとRowNoを更新したいのですが
Update ~ WHERE CURRENT OF C_TESTの部分で「16929:カーソルは読み取り専用です。」のエラーが発生してしまいます。
ただ、ORDER BY句を外して実行すると更新は可能です。
どのような書き方をすればOrderByしたカーソルの内容を更新することが出来るのでしょうか?
SQLServer初心者です。どなたかご教授ください。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
SQLServer2017
ストアド
回答1件
あなたの回答
tips
プレビュー