Entrar

CORRECÇÃO: O uso ineficiente da cláusula LIKE com provedor 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

311159
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Quando você executa uma consulta SQL usando o Microsoft Jet OLEDB Provider 4.0 e você aplicar uma cláusula LIKE para uma tabela vinculada do SQL Server, a cláusula LIKE não é corretamente encaminhada pelo processador de consulta do Microsoft Jet para o SQL Server. Isso resulta em uma consulta geral menos eficiente, pois todas as linhas são primeiro recuperadas no SQL Server localmente pelo Jet.

Observe que após todas as linhas são recuperadas localmente pelo Jet, a cláusula LIKE é aplicada internamente para o resultado final antes de enviá o resultado para o cliente, para que o resultado final é o mesmo conjunto de linhas.
Resolução
Para resolver esse problema, instale o Microsoft Jet 4.0 service pack mais recente. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
239114Como: Obter o Service Pack mais recente para o Microsoft Jet 4.0 Database Engine
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido no Jet 4.0 Service Pack 6 (SP6).
Mais Informações

Etapas para reproduzir o problema

  1. Crie um banco de dados novo do Microsoft Access chamado "C:\DB1.MDB".
  2. Abra C:\DB1.MDB no Microsoft Access e crie uma tabela vinculada para a tabela autores localizada no banco de dados pubs no SQL server. Manter o nome de tabela vinculada padrão do dbo_authors .
  3. Executar a consulta a seguir usando o Microsoft Jet OLEDB Provider 4.0 com o banco de dados do Access C:\DB1.MDB.
    SELECT * from dbo_authors WHERE state LIKE 'M%'					
Se você monitorar o servidor de SQL Server de back-end usando o utilitário SQL Server Profiler, você verá que instruções SQL a seguir são enviadas para o SQL Server, indicando que o otimizador de consulta do Microsoft Jet está aplicando o critério LIKE depois de recuperar todas as linhas da tabela autores . Observe que todas as instruções SQL não críticas foram removidas e comentários foram 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 você executar a consulta SQL idêntica usando o driver de ODBC do Microsoft Access, a cláusula LIKE corretamente é encaminhada para SQL Server na primeira instrução SQL, resultando em uma 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:06 - Revisão: 1.4

  • Microsoft OLE DB Provider for Jet 4.0
  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbqfe KB311159 KbMtpt
Comentários