カーソルの代わりにさまざまなクエリでテーブルを更新できることはわかっていますが、カーソルについての知識を得るためにカーソルを使用してみたかったのです。これが私が試していたもので、nullの代わりにnull値を持つ新しい列を挿入しました。ここでクエリを使用したタイトル列に基づいてその列を更新したかったのですが、テーブルを更新できません。誰かがこれに対する解決策を提案できます。
Declare @Title varchar(max)
Declare @Department varchar(max)
Declare Department_Cursor Cursor
For
Select Title, Department
from Sample_table
Open Department_Cursor
Fetch Next From Department_Cursor Into @Title, @Department
While @@fetch_status = 0
Begin
Update sample_table
Set @Department = 'Production'
where @Title = '%Production%'
Fetch Next From Department_Cursor Into @Title, @Department
End
Close Department_Cursor
Deallocate Department_Cursor
私はあなたが持っているものを実行しようとしましたが、1つの小さなエラーに気づきました:
where @Title = '%Production%'
したがって、@ Titleが実際に= '%Production%'の場合、テーブル全体が更新されます。それまでは、0行を更新します。私の推測では、あなたがやろうとしていることは次のようなものです。
WHERE @Title LIKE '%Production%'
AND Title = @Title
そして、さらに詳しく調べてみると、これも必要ないと思います
SET @Department = 'Production'
あなたはおそらく意味します
SET Department = 'Production'
これは、カーソルでDepartment
を引く必要がまったくないことも意味します。最後になりましたが、カーソルがプルされているテーブルを更新しているので、読み取り専用カーソルを使用します。ただし、これはカーソルの結果をtempdbに書き込むため、テーブルが大きい場合はあまりお勧めできません。
最後のコメント:カーソルは必ずしも悪いわけではありません。ただし、バッチ処理が不可能な場合にのみ使用してください。複数の入力を使用してストアドプロシージャを実行するとします。しかし、あなたが積極的にそれらを実践しているのは素晴らしいことだと思います。