CORREÇÃO: O resultado incorreto quando você executa uma consulta que contém um conjunto e uma disjunção no SQL Server Compact 3. 5

Traduções deste artigo Traduções deste artigo
ID do artigo: 2494715
Expandir tudo | Recolher tudo

Sintomas

Quando você executa uma consulta em um banco de dados do Microsoft SQL Server Compact 3. 5, será retornado um resultado incorreto. Esse problema ocorre quando a consulta contém um conjunto e uma disjunção. Se supusermos que os operadores são E e OR, a consulta deverá atender as condições específicas a seguir:
  • Um dos operandos da E o operador é uma expressão que contém o OR operador.
  • Os operandos daORoperador contêm expressões que referenciam a mesma coluna. Portanto, um índice da coluna pode ser usado para coincidir com as expressões.
  • O outro operando da Eoperador contém uma referência a uma coluna que usa o mesmo índice da coluna que está especificado no ponto de marcador anterior desta lista. Portanto, o índice pode ser usado também nessa expressão.
Por exemplo, suponha que você crie as tabelas a seguir que usam os índices em um banco de dados do SQL Server Compact 3. 5.
CREATE TABLE T1(
 C1 int,
 C2 int
)
GO
CREATE INDEX IND_T1 ON T1 (C1, C2)
GO
CREATE TABLE T2(
 C1 int,
 C2 int
)
GO
CREATE INDEX IND_T2 ON T2 (C1, C2)
GO
INSERT INTO T1 VALUES (1, 0)
GO
INSERT INTO T1 VALUES (2, 0)
GO
INSERT INTO T2 VALUES (1, -1)
GO
INSERT INTO T2 VALUES (2, 0)
GO
Em seguida, você pode executar a consulta a seguir:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]
FROM T1 INNER JOIN T2 ON
T1.C1 = T2.C1
AND (T1.C2 = T2.C2 OR T2.C2 = -1)
GO
Depois de executar a consulta, você receberá o seguinte resultado incorreto:
Recolher esta tabelaExpandir esta tabela
T1.C1T1.C2T2.C1T2.C2
2020
No entanto, você pode esperar o seguinte resultado:
Recolher esta tabelaExpandir esta tabela
T1.C1T1.C2T2.C1T2.C2
101-1
2020
ObservaçãoEsse problema também ocorre quando você usa oONDEcláusula para realizar uma conjunção lógica em duas expressões. Por exemplo, este problema também ocorre quando você executa a consulta a seguir:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]
FROM T1 INNER JOIN T2 ON
T1.C1 = T2.C1
WHERE T1.C2 = T2.C2 OR T2.C2 = -1
GO

Resolução

O hotfix que resolve esse problema está incluído no pacote de atualização cumulativa 4 para o SQL Server Compact 3. 5 Service Pack 2.

Para obter mais informações sobre como obter o pacote de atualização cumulativa 4 para o SQL Server Compact 3. 5 Service Pack 2, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
2516828 Atualização cumulativa 4 para o SQL Server Compact 3. 5 Service Pack 2

Como Contornar

Para contornar esse problema, reescreva a consulta usando um dos seguintes métodos:

Método 1

Use dicas de tabela na consulta para desativar os índices. Por exemplo, execute a consulta a seguir para desativar os índices:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]
FROM T1 INNER JOIN T2 WITH (INDEX(0)) ON
T1.C1 = T2.C1
AND (T1.C2 = T2.C2 OR T2.C2 = -1)
GO 

Método 2

Reescrever a consulta para evitar que atendem às condições mencionadas na seção "Sintomas":
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]
FROM T1 INNER JOIN T2 ON
(T1.C1 = T2.C1 AND T2.C2 = -1) OR (T1.C1 = T2.C1 AND T1.C2 = T2.C2)

Situação

A Microsoft confirmou que se trata de um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Propriedades

ID do artigo: 2494715 - Última revisão: quarta-feira, 27 de abril de 2011 - Revisão: 2.0
Palavras-chave: 
kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 KbMtpt
Traduçã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: 2494715

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com