位置指定更新と Delete ステートメントの処理
重要
この機能は、Windows の将来のバージョンで削除される予定です。 新しい開発作業ではこの機能を使用しないでください。また、現在この機能を使用しているアプリケーションの変更を計画してください。 Microsoft では、ドライバーのカーソル機能を使用することをお勧めします。
カーソル ライブラリは、このようなステートメントの WHERE CURRENT OF 句を、バインドされた各列のキャッシュに格納されている値を列挙する WHERE 句に置き換えることによって、位置指定された更新ステートメントと delete ステートメントをサポートします。 カーソル ライブラリは、新しく構築された UPDATE ステートメントと DELETE ステートメントをドライバーに渡して実行します。 位置指定された update ステートメントの場合、カーソル ライブラリは行セット バッファー内の値からキャッシュを更新し、行状態配列の対応する値をSQL_ROW_UPDATEDに設定します。 位置指定された delete ステートメントの場合、行状態配列の対応する値をSQL_ROW_DELETEDに設定します。
注意事項
現在の行を識別するためにカーソル ライブラリによって構築された WHERE 句は、行の識別、別の行の識別、または複数の行の識別に失敗する可能性があります。 詳細については、この付録で後述 する「検索ステートメントの構築」を参照してください。
位置指定の更新ステートメントと delete ステートメントには、次の制限があります。
位置指定更新ステートメントと delete ステートメントは、 SELECT ステートメントによって結果セットが生成された場合にのみ使用できます。 SELECT ステートメントに結合、 UNION 句、または GROUP BY 句が含まれていない場合。選択リストで別名または式を使用する列が SQLBindCol にバインドされていない場合。
配置された更新ステートメントまたは delete ステートメントをアプリケーションで準備する場合は、SQLFetch または SQLFetchScroll を呼び出した後で行う必要があります。 カーソル ライブラリは準備のためにステートメントをドライバーに送信しますが、 ステートメントを閉じて、アプリケーションが SQLExecute を呼び出すときに直接実行します。
ドライバーが 1 つのアクティブなステートメントのみをサポートしている場合、カーソル ライブラリは結果セットの残りの部分をフェッチし、位置指定された更新または削除ステートメントを実行する前に、キャッシュから現在の行セットを再フェッチします。 アプリケーションが結果セット内のメタデータを返す関数 ( SQLNumResultCols や SQLDescribeCol など) を呼び出すと、カーソル ライブラリはエラーを返します。
更新が実行されるたびに自動的に更新されるタイムスタンプ列を含むテーブルの列に対して位置指定の更新または削除ステートメントが実行された場合、タイムスタンプ列がバインドされている場合、後続のすべての位置指定更新または削除ステートメントは失敗します。 これは、カーソル ライブラリによって作成される検索された更新または削除ステートメントで、更新する行が正確に識別されないために発生します。 timestamp 列の検索ステートメントの値が、タイムスタンプ列の自動的に更新された値と一致しません。