ID do artigo: 225093 - Última revisão: terça-feira, 14 de março de 2006 - Revisão: 2.1

CORRECÇÃO: Desempenho ruim com associação interna com várias cláusulas LIKE usando variáveis

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
BUG #: 55032 (SQLBUG_70)
Expandir tudo | Recolher tudo

Sintomas

Uma associação interna entre duas tabelas com vários como cláusulas produz um plano de consulta ruim se as cláusulas LIKE usar variáveis em vez de literais de seqüência de caracteres.

Como Contornar

Para contornar esse use um dos seguintes:
  • Substitua as variáveis de constantes de seqüência de caracteres.
  • Forneça uma dica para forçar uma associação de loop. Por exemplo, use um LOOP INNER JOIN em vez de uma INNER JOIN.
  • Use o procedimento de armazenado do sistema sp_executesql para executar a consulta, passando as variáveis como parâmetros. Para obter a sintaxe detalhes consulte o artigo Books Online "sp_executesql (T-SQL)".

Situação

A Microsoft confirmou que este é um problema no SQL Server 7.0. Esse problema foi corrigido no EUA Service Pack 2 para o Microsoft SQL Server 7.0. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
254561  (http://support.microsoft.com/kb/254561/ ) INF: Como obter o Service Pack 2 para Microsoft SQL Server 7.0 e Microsoft Data Engine (MSDE) 1.0
Para obter mais informações, entre em contato com seu provedor de suporte primário.

Mais Informações

As seguintes condições devem ser atendidas para encontrar esse bug:
  1. A consulta deve conter uma associação interna.
  2. A cláusula WHERE da consulta deve conter vários LIKE predicados.
  3. Predicados LIKE devem ser passados uma variável, não uma constante de seqüência de caracteres (isto é, "... E coluna como @ myvar1...").
Associação interna pode usar a sintaxe de associação ANSI-padrão ou TRANSACTA-SQL (TSQL).

Por exemplo, a consulta a seguir demonstra esse problema:
SELECT p.first_name
FROM person p
INNER JOIN customer c ON p.person_id = c.person_id 
WHERE p.last_name LIKE @last_name AND
   p.first_name LIKE @first_name 
				

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbmt kbbug kbfix KB225093 KbMtpt
Tradução automáticaTradução automática
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.
Clique aqui para ver a versão em Inglês deste artigo: 225093  (http://support.microsoft.com/kb/225093/en-us/ )