1

カーソルがデッドロックを引き起こすという悪い経験がありました。可能な限りカーソルを排除しようとしています。やむを得ない場合は、カーソルが開いている間の作業量を最小限に抑えるようにしています。

データをテーブル変数にコピーし、テーブル変数の上にカーソルを作成する方が良いでしょうか?

答えは、データセットのサイズに依存する可能性が高いことはわかっています。現時点では、めったに更新されない非常に小さなデータセット (ハンドルいっぱいのレコード) に関心があります。場合によっては、大規模なデータ セットに対して複雑なループを作成することがあります。

テーブル変数にコピーする利点はありますか、それとも物事を複雑にしすぎていますか?

4

1 に答える 1

2

宣言時にカーソルを定義STATICすると、SQL Server はデータの一時コピーを自動的に作成します。

ドキュメントから:

静的

カーソルが使用するデータの一時コピーを作成するカーソルを定義します。カーソルに対するすべての要求は、tempdb のこの一時テーブルから応答されます。したがって、ベース テーブルに加えられた変更は、このカーソルに対して行われたフェッチによって返されるデータには反映されず、このカーソルは変更を許可しません。

于 2011-05-25T14:48:05.777 に答える