位置指定更新と Delete ステートメントの処理

Important

この機能は、今後のバージョンの Windows で削除される予定です。 新しい開発作業ではこの機能を使用しないでください。現在この機能を使用しているアプリケーションを変更することを計画してください。 Microsoft では、ドライバーのカーソル機能を使用することをお勧めします。

カーソルライブラリは、 WHERE CURRENT OF 節を各バウンド列のキャッシュに格納する WHERE 節に置き換えることで、位置付けられた更新文と削除文をサポートします。 カーソルライブラリは新たに構築された UPDATE 文と DELETE 文をドライバに渡し、実行させます。 位置付けされたupdate文の場合、カーソルライブラリは行セットバッファ内の値からキャッシュを更新し、対応する行の状態配列の値をSQL_ROW_UPDATEDに設定します。 位置付けされた削除文の場合、行の状態配列に対応する値をSQL_ROW_DELETEDに設定します。

Caution

カーソルライブラリが現在の行を識別するために構築する WHERE 節は、行を識別できなかったり、別の行を識別できなかったり、複数の行を識別できなかったりすることがあります。 詳細については、この付録の後半にある 「検索された文の構築」を参照してください。

位置付けされた更新および削除の文は以下の制限の対象となります:

  • 位置付けされた更新文と削除文は、以下の場合のみ使用できます: SELECT 文が結果セットを生成した場合; SELECT 文にjoin、 UNION 節、 またはGROUP BY 節が含まれていない場合;また、選択リストでエイリアスや式を使用する列が SQLBindColにバインドされていない場合も参照しています。

  • アプリケーションが位置付けされたupdateやdelete文を準備する場合、 SQLFetch または SQLFetchScrollを呼び出した後に行う必要があります。 カーソルライブラリは準備のために文をドライバに提出しますが、アプリケーションが SQLExecuteを呼び出すと文を閉じて直接実行します。

  • ドライバがアクティブな文を1つだけサポートしている場合、カーソルライブラリは残りの結果セットを取り出し、現在の行セットをキャッシュから再取得してから、位置付けされた更新文や削除文を実行します。 その後、アプリケーションが結果セットのメタデータを返す関数(例: SQLNumResultColsSQLDescribeCol)を呼び出すと、カーソルライブラリはエラーを返します。

  • タイムスタンプ列を含むテーブルのカラムに対して位置付けされた更新または削除文が実行され、その列が更新のたびに自動的に更新される場合、タイムスタンプ列がバインドされると、その後のすべての位置付けされた更新文や削除文は失敗します。 これは、カーソルライブラリが作成する検索した更新または削除文が、更新すべき行を正確に識別できないために起こります。 検索した文のタイムスタンプ列の値は、自動的に更新されたタイムスタンプ列の値と一致しません。