概要:このチュートリアルでは、SQLServerカーソルを使用して一度に1行ずつ結果セットを処理する方法を学習します。
SQLはセットに基づいて機能します。たとえば、SELECTステートメントは、結果セットと呼ばれる行のセットを返します。ただし、データセットを行ごとに処理したい場合があります。ここでカーソルが機能します。
データベースカーソルとは
データベースカーソルは、結果セットの行をトラバースできるようにするオブジェクトです。クエリによって返された個々の行を処理できます。
SQLServerカーソルのライフサイクル
カーソルを使用する手順は次のとおりです。
まず、カーソルを宣言します。
Code language: SQL (Structured Query Language) (sql)
カーソルを宣言するには、DECLAREキーワードの後にCURSORデータ型を指定してカーソルの名前を指定し、カーソルの結果セットを定義するSELECTステートメント。
次に、SELECTステートメント:
Code language: SQL (Structured Query Language) (sql)
次に、カーソルから1つ以上の変数に行をフェッチします:
Code language: SQL (Structured Query Language) (sql)
SQL Serverは、カーソルに対して実行された最後のカーソルFETCHステートメントのステータスを返す@@FETCHSTATUS関数を提供します。 @@FETCHSTATUSが0を返した場合、FETCHステートメントが成功したことを意味します。次のコードに示すように、WHILEステートメントを使用して、カーソルからすべての行をフェッチできます。
Code language: SQL (Structured Query Language) (sql)
その後、カーソルを閉じます:
Code language: SQL (Structured Query Language) (sql)
最後に、カーソルの割り当てを解除します:
Code language: SQL (Structured Query Language) (sql)
SQLServerカーソルの例
サンプルデータベースのprodution.productsテーブルを使用して、カーソルの使用方法を示します。
最初に、製品名と定価を保持する2つの変数を宣言し、 production.productsテーブルから製品名と定価を取得するクエリの結果を保持するカーソル:
次に、カーソルを開きます:
Code language: SQL (Structured Query Language) (sql)
次に、カーソルから各行をフェッチし、製品名と定価を出力します。
その後、カーソルを閉じます:
Code language: SQL (Structured Query Language) (sql)
最後に、カーソルの割り当てを解除して解放します。
次のコードスニペットはすべてをまとめたものです:
部分的な出力は次のとおりです:
実際には、カーソルを使用して結果セットを行ごとに処理することはめったにありません。
このチュートリアルでは、SQLServerカーソルを使用して結果セットを各行で一度に処理する方法を学習しました。