CORRECÇÃO: Utilização ineficaz cláusula LIKE com o fornecedor de OLEDB do Jet

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 311159
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sintomas
Quando executar uma consulta SQL utilizando o Microsoft Jet OLEDB fornecedor 4.0 e aplicar uma cláusula LIKE para uma tabela ligada do SQL Server, a cláusula LIKE não é correctamente reencaminhada pelo processador de consultas do Microsoft Jet para o SQL Server. Isto resulta numa consulta geral menos eficiente, porque todas as linhas são primeiro obtidas a partir do SQL Server localmente pelo Jet.

Tenha em atenção que depois todas as linhas são obtidas localmente pelo Jet, a cláusula LIKE é aplicada internamente o resultado final antes de enviar o resultado ao cliente, pelo que o resultado final é o mesmo conjunto de linhas.
Resolução
Para resolver este problema, instale o Microsoft Jet 4.0 service pack mais recente. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
239114Como: Obter o Service Pack mais recente para o motor de base de dados Microsoft Jet 4.0
Ponto Da Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido no Jet 4.0 Service Pack 6 (SP6).
Mais Informação

Passos para reproduzir o comportamento

  1. Crie uma base novo de Microsoft Access dados com o nome "C:\DB1.MDB".
  2. Abra C:\DB1.MDB no Microsoft Access e crie uma tabela ligada à tabela autores localizada na base de dados pubs no servidor de SQL Server. Mantenha o nome de tabela predefinido de dbo_authors .
  3. Execute a seguinte consulta a utilizar o o fornecedor de OLEDB Microsoft Jet 4.0 em relação à base de dados C:\DB1.MDB.
    SELECT * from dbo_authors WHERE state LIKE 'M%'					
Se monitorizar o servidor de SQL Server back-end utilizando o utilitário de SQL Server Profiler, verá que as seguintes instruções SQL são enviadas para o SQL Server, que indica que o Optimizador de consultas do Microsoft Jet é aplicar critérios LIKE depois de obter todas as linhas a partir da tabela autores . Tenha em atenção que foram removidas todas as instruções de SQL não críticas e comentários adicionados ao descrever as várias instruções SQL enviadas pelo Microsoft Jet.
-- This is sent first by Jet to fetch all key values.  -- Note that WHERE state LIKE 'M%' is not applied here.SELECT au_id, state FROM authors -- This retrieves a single row using the first key value retrieved by the-- above SQL statement. Jet will apply the LIKE clause internally-- before retrieving the first row.SELECT au_id,au_lname,au_fname,phone,address,city,state,zip,contract  FROM dbo.authors WHERE au_id = @P1 				
se executar a consulta SQL idêntica utilizando o controlador ODBC do Microsoft Access, a cláusula LIKE correctamente é reencaminhada para SQL Server na primeira instrução de SQL, resultando na consulta geral muito mais eficiente.
JOLT

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 311159 - Última Revisão: 01/11/2015 04:27:05 - Revisão: 1.4

Microsoft OLE DB Provider for Jet 4.0

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbqfe KB311159 KbMtpt
Comentários