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

Traduções de Artigos Traduções de Artigos
Artigo: 2494715
Expandir tudo | Reduzir tudo

Sintomas

Quando executa uma consulta numa base de dados do Microsoft SQL Server Compact 3,5, é devolvido um resultado incorrecto. Este problema ocorre quando a consulta contém um conjunto e uma disjunção. Se partimos do princípio que os operadores são E e OR, a consulta tem de satisfazer as condições específicas seguintes:
  • Um dos operandos do E o operador é uma expressão que contém o OR operador.
  • Os operandos daORoperador contêm expressões que fazem referência a mesma coluna. Por conseguinte, um índice da coluna pode ser utilizado para corresponder as expressões.
  • O outro operando do Eoperador contém uma referência a uma coluna que utiliza o mesmo índice como a coluna especificada no ponto de marca anterior nesta lista. Por conseguinte, o índice pode ser utilizado também nesta expressão.
Por exemplo, suponha que crie as seguintes tabelas utilizam índices numa base 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, execute a seguinte consulta:
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, receberá o seguinte resultado incorrecto:
Reduzir esta tabelaExpandir esta tabela
T1.C1T1.C2T2.C1T2.C2
2020
No entanto, o que espera o seguinte resultado:
Reduzir esta tabelaExpandir esta tabela
T1.C1T1.C2T2.C1T2.C2
101-1
2020
NotaEste problema também ocorre quando utiliza oEM QUEcláusula para efectuar uma conjunção lógica em duas expressões. Por exemplo, este problema também ocorre quando executa a consulta seguinte:
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

A correcção que resolve este problema está incluída no pacote de actualização cumulativa 4 para o SQL Server Compact 3. 5 Service Pack 2.

Para mais informações sobre como obter o pacote de actualização cumulativa 4 para o SQL Server Compact 3. 5 Service Pack 2, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
2516828 Actualização cumulativa 4 para o SQL Server Compact 3. 5 Service Pack 2

Como contornar

Para contornar este problema, rescreva a consulta utilizando um dos seguintes métodos:

Método 1

Utilize sugestões para a tabela na consulta para desactivar os índices. Por exemplo, execute a seguinte consulta para desactivar 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

Rescrever a consulta para evitar que satisfaçam as condições mencionadas na secçã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)

Ponto Da Situação

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

Propriedades

Artigo: 2494715 - Última revisão: 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 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: 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