Requisitos de cursores controlados por conjunto de chaves para provedores OLE DB

Cursores controlados por conjunto de chaves Transact-SQL podem fazer referência a tabelas remotas apenas se as seguintes condições forem atendidas:

  • A consulta distribuída deve atender aos requisitos de instruções SELECT usadas em uma instrução DECLARE CURSOR que declara o cursor controlado por conjunto de chaves. Para obter mais informações sobre as condições de Transact-SQL para suporte a cursor controlado por conjunto de chaves, consulte DECLARE CURSOR (Transact-SQL).

  • Todas as tabelas locais na consulta devem ter um índice exclusivo. O índice da tabela remota deve ser exposto pelo conjunto de linhas INDEXES da interface IDBSchemaRowset.

Requisitos de índice em provedores OLE DB

O SQL Server pode usar índices em tabelas de um provedor OLE DB para avaliar determinadas consultas. Para que o SQL Server use um índice, o provedor deve expor interfaces OLE DB que permitam a verificação de um conjunto de linhas de índice, pesquisando no conjunto de linhas do índice usando valores de colunas do índice e definindo a posição da linha no conjunto de linhas da tabela base usando indicadores obtidos do conjunto de linhas do índice.

O uso de índices do provedor OLE DB tem benefícios de desempenho apenas quando o conjunto de linhas do índice e da tabela estão no mesmo computador que a instância do SQL Server. Portanto a opção Índice como Caminho de Acesso deverá ser definida apenas se a fonte de dados estiver no mesmo computador que o SQL Server.

O SQL Server pode usar os índices de um provedor OLE DB apenas se as seguintes condições forem atendidas:

  • O provedor deve oferecer suporte à interface IDBSchemaRowset com os conjuntos de linhas de esquema de TABLES, COLUMNS e INDEXES.

  • O provedor deve oferecer suporte à abertura de um conjunto de linhas em um índice através de IOpenRowset especificando o nome do índice e o nome da tabela base correspondente.

  • O objeto de Índice deve fornecer suporte a todas as interfaces obrigatórias: IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfoe IConvertTypes.

  • Os conjuntos de linhas abertos em relação à tabela base indexada, usando IOpenRowset, devem oferecer suporte à interface IRowsetLocate para posicionamento em uma linha na tabela base com base em um indicador obtido do conjunto de linhas do índice.

Se o provedor OLE DB atender a esses requisitos, o administrador do SQL Server poderá definir a opção do provedor Índice como Caminho de Acesso para permitir que o SQL Server use os índices do provedor para avaliar as consultas. Por padrão, o SQL Server não tenta usar os índices do provedor a menos que essa opção esteja definida.

Requisitos de cursor de conjunto de chaves atualizável

Uma tabela remota pode ser atualizada ou excluída por um cursor de conjunto de chaves definido em uma consulta distribuída. Por exemplo: UPDATE | DELETE remote_table WHERE CURRENT OF cursor_name.

As seguintes são as condições sob as quais cursores atualizáveis em relação a consultas distribuídas são permitidos:

  • O provedor deve atender às condições para atualizações e exclusões na tabela remota. Para obter mais informações, consulte Requisitos de UPDATE e DELETE para provedores OLE DB.

  • Todas as operações do cursor devem estar em uma transação de usuário explícita ou transação de várias instruções, com nível de isolamento de leitura repetível ou nível de isolamento serializável.

O provedor deve oferecer suporte a transações distribuídas usando a interface ITransactionJoin.