Requisitos de cursores dinámicos para proveedores OLE DB

Los cursores dinámicos Transact-SQL sólo pueden hacer referencia a tablas remotas si se cumplen las siguientes condiciones:

  • La consulta distribuida debe cumplir los requisitos de las instrucciones SELECT usadas en una instrucción DECLARE CURSOR que declara el cursor dinámico. Para obtener más información sobre las condiciones Transact-SQL que admiten cursores dinámicos, vea DECLARE CURSOR (Transact-SQL).

  • Todas las tablas locales de la consulta deben tener un índice único. El índice de la tabla remota debe exponerse a través del conjunto de filas INDEXES de la interfaz IDBSchemaRowset.

Requisitos de índices de proveedores OLE DB

SQL Server puede utilizar los índices de las tablas de un proveedor OLE DB para evaluar determinadas consultas. Para que SQL Server utilice un índice, el proveedor debe exponer las interfaces OLE DB que permiten recorrer un conjunto de filas de índice, buscando en el conjunto de filas de índice mediante los valores de columnas de índice y estableciendo la posición de la fila del conjunto de filas de la tabla base utilizando marcadores obtenidos del conjunto de filas de índice.

El uso de los índices del proveedor OLE DB sólo tiene ventajas en el rendimiento cuando los conjuntos de filas de índice y tabla están en el mismo equipo que la instancia de SQL Server. Por tanto, la opción Índice como ruta de acceso sólo se debe establecer si el origen de datos se encuentra en el mismo equipo que SQL Server.

SQL Server puede utilizar los índices de un proveedor OLE DB sólo si se cumplen las condiciones siguientes:

  • El proveedor debe admitir la interfaz IDBSchemaRowset con los conjuntos de filas de esquema TABLES, COLUMNS e INDEXES.

  • El proveedor debe admitir la apertura de un conjunto de filas en un índice mediante IOpenRowset especificando el nombre del índice y el nombre de la tabla base correspondiente.

  • El objeto Index debe admitir todas sus interfaces obligatorias: IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfo, y IConvertTypes.

  • Los conjuntos de filas que se abren sobre la tabla base indizada, mediante IOpenRowset, deben admitir la interfaz IRowsetLocate para posicionarse en una fila de la tabla base basándose en un marcador obtenido del conjunto de filas de índice.

Si el proveedor OLE DB cumple estos requisitos, el administrador de SQL Server podrá establecer la opción del proveedor Índice como ruta de acceso para que SQL Server pueda utilizar los índices del proveedor con el fin de evaluar las consultas. De forma predeterminada, SQL Server no intenta utilizar los índices del proveedor a menos que se establezca esta opción.

Requisitos de los cursores dinámicos actualizables

Una tabla remota se puede actualizar o eliminar utilizando un cursor dinámico definido en una consulta distribuida. Por ejemplo: UPDATE | DELETE remote_table WHERE CURRENT OF cursor_name.

Éstas son las condiciones que se deben cumplir para poder utilizar cursores actualizables en las consultas distribuidas:

  • El proveedor debe cumplir las condiciones de actualización y eliminación de la tabla remota. Para obtener más información, vea Requisitos de UPDATE y DELETE para los proveedores OLE DB.

  • Todas las operaciones de cursor deben estar incluidas en una transacción del usuario explícita, o en una transacción con múltiples instrucciones, con nivel de aislamiento de lectura repetible o serializable.

El proveedor debe admitir el uso de transacciones distribuidas con la interfaz ITransactionJoin.