キーセット ドリブン カーソルを使用するための OLE DB プロバイダの要件

Transact-SQL のキーセット ドリブン カーソルでリモート テーブルを参照できるのは、次の条件を満たしている場合だけです。

  • 分散クエリは、キーセット ドリブン カーソルを宣言した DECLARE CURSOR ステートメントの中で使用されている SELECT ステートメントの要件を満たしている必要があります。Transact-SQL のキーセット ドリブン カーソル サポートの条件の詳細については、「DECLARE CURSOR (Transact-SQL)」を参照してください。

  • クエリに含まれるすべてのローカル テーブルには、一意インデックスが設定されている必要があります。リモート テーブルのインデックスは、IDBSchemaRowset インターフェイスの INDEXES 行セットにより公開される必要があります。

インデックスを使用するための OLE DB プロバイダの要件

SQL Server は OLE DB プロバイダからテーブルのインデックスを使用して、特定のクエリを評価できます。SQL Server がインデックスを使用する場合、OLE DB プロバイダは OLE DB インターフェイスを公開する必要があります。これにより、インデックスの行セットのスキャン、インデックス列値を使用したインデックス行セットの検索、およびインデックスの行セットから取得したブックマークによるベース テーブルの行セットの行位置指定が可能になります。

OLE DB プロバイダのインデックスを使用することによってパフォーマンス上の利点が得られるのは、インデックスとテーブル行セットが SQL Server のインスタンスと同じコンピュータに存在するときだけです。したがって、Index AS Access Path オプションは、データ ソースが SQL Server と同じコンピュータ上に存在するときにのみ設定します。

SQL Server では、以下の条件が満たされる場合にのみ OLE DB プロバイダのインデックスを使用できます。

  • プロバイダは、TABLES、COLUMNS、および INDEXES スキーマ行セットを伴う IDBSchemaRowset インターフェイスをサポートする必要があります。

  • プロバイダは、インデックス名と対応するベース テーブル名を指定することで、IOpenRowset からインデックス上で行セットを開く処理をサポートする必要があります。

  • Index オブジェクトは、そのすべての必須インターフェイス (IRowsetIRowsetIndexIAccessorIColumnsInfoIRowsetInfoIConvertTypes) をサポートする必要があります。

  • IOpenRowset を使用してインデックス付きのベース テーブルに対して開かれた行セットが、インデックスの行セットから取得したブックマークからベース テーブルの行位置を指定する IRowsetLocate インターフェイスをサポートする必要があります。

OLE DB プロバイダが上記の必要条件を満たす場合、SQL Server 管理者は Index As Access Path プロバイダ オプションを設定して、SQL Server がプロバイダのインデックスを使用してクエリを評価できるようにすることができます。既定では、このオプションが設定されない限り、SQL Server はプロバイダのインデックスを使用しません。

更新可能なキーセット カーソルの必要条件

リモート テーブルは、分散クエリで定義されたキーセット カーソルを使用して更新または削除できます。例 : UPDATE | DELETE remote_table WHERE CURRENT OF cursor_name

次に、更新可能なカーソルが分散クエリに許可される条件を示します。

  • プロバイダは、リモート テーブルでの更新と削除の条件を満たす必要があります。詳細については、「UPDATE と DELETE を使用するための OLE DB プロバイダの要件」を参照してください。

  • すべてのカーソル操作は、読み取り反復可能な分離レベルまたはシリアル化分離レベルの明示的なユーザー トランザクション、または複数ステートメントのトランザクション内で行われる必要があります。

プロバイダは、ITransactionJoin インターフェイスを使用して分散トランザクションをサポートする必要があります。