Artigo: 225093 - Última revisão: terça-feira, 14 de Março de 2006 - Revisão: 2.1

CORRECÇÃO: Fraco desempenho com associação interna com várias cláusulas LIKE utilizando 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.
N.º DE BUGS: 55032 (SQLBUG_70)
Expandir tudo | Reduzir tudo

Sintomas

Uma associação interna entre duas tabelas com vários LIKE cláusulas produz um plano de consulta fraca se as cláusulas LIKE utilizam variáveis em vez de literais de cadeia.

Como contornar

Para contornar esta, utilize um dos seguintes procedimentos:
  • Substitua as variáveis de cadeia constantes.
  • Fornece uma sugestão para forçar uma associação de ciclo. Por exemplo, utilize um LOOP INNER JOIN em vez de numa INNER JOIN.
  • Utilize o do procedimento armazenado do sistema sp_executesql para executar a consulta, passar as variáveis como parâmetros. Para obter a sintaxe detalhes consulte o artigo Books Online "sp_executesql (T-SQL)".

Ponto Da Situação

Microsoft confirmou que este problema existe no SQL Server 7.0. Este problema foi corrigido dos Estados Unidos Service Pack 2 para o Microsoft SQL Server 7.0. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
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 mais informações, contacte o fornecedor de suporte principal.

Mais Informação

As seguintes condições devem ser cumpridas para encontrar este erro:
  1. A consulta pode conter uma associação interna.
  2. A cláusula WHERE da consulta pode conter vários LIKE predicados.
  3. Predicados LIKE tem de ser passados uma variável, não uma constante de cadeia (ou seja, "... E coluna LIKE @ myvar1...").
A associação interna pode utilizar o padrão ANSI ou Transact-SQL (TSQL) sintaxe de associação.

Por exemplo, a consulta seguinte demonstra este 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 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: 225093  (http://support.microsoft.com/kb/225093/en-us/ )