Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

REVISIÓN: Un resultado incorrecto al ejecutar una consulta que contiene una conjunción y una disyunción en SQL Server Compact 3.5

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 2494715
Síntomas
Cuando se ejecuta una consulta contra una base de datos de Microsoft SQL Server Compact 3.5, se devuelve un resultado incorrecto. Este problema se produce cuando la consulta contiene una conjunción y una disyunción. Si suponemos que los operadores son Y y OR, la consulta debe cumplir las condiciones específicas siguientes:
  • Uno de los operandos de la Y operador es una expresión que contiene el OR operador.
  • Los operandos de laORoperador contienen expresiones que hacen referencia a la misma columna. Por lo tanto, un índice de la columna puede utilizarse para que coincida con las expresiones.
  • El otro operando de la Yoperador de contiene una referencia a una columna que utiliza el mismo índice que la columna que se especifica en el anterior punto con viñeta en esta lista. Por lo tanto, el índice también se puede utilizar en esta expresión.
Por ejemplo, suponga que crea las tablas siguientes que utilizan índices en una base de datos de SQL Server Compact 3.5.
CREATE TABLE T1( C1 int, C2 int)GOCREATE INDEX IND_T1 ON T1 (C1, C2)GOCREATE TABLE T2( C1 int, C2 int)GOCREATE INDEX IND_T2 ON T2 (C1, C2)GOINSERT INTO T1 VALUES (1, 0)GOINSERT INTO T1 VALUES (2, 0)GOINSERT INTO T2 VALUES (1, -1)GOINSERT INTO T2 VALUES (2, 0)GO
A continuación, ejecute la consulta siguiente:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]FROM T1 INNER JOIN T2 ONT1.C1 = T2.C1AND (T1.C2 = T2.C2 OR T2.C2 = -1)GO
Después de ejecutar la consulta, recibirá el siguiente resultado incorrecto:
T1.C1T1.C2T2.C1T2.C2
2020
Sin embargo, que espera el resultado siguiente:
T1.C1T1.C2T2.C1T2.C2
101-1
2020
NotaEste problema se produce también cuando se utiliza elDONDEcláusula para realizar una conjunción lógica de dos expresiones. Por ejemplo, este problema también se produce cuando se ejecuta la consulta siguiente:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]FROM T1 INNER JOIN T2 ONT1.C1 = T2.C1WHERE T1.C2 = T2.C2 OR T2.C2 = -1GO
Solución
La revisión que resuelve este problema se incluye en el paquete de actualización acumulativa 4 para SQL Server Compact 3.5 Service Pack 2.

Para obtener más información acerca de cómo obtener el paquete de actualización acumulativa 4 para SQL Server Compact 3.5 Service Pack 2, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2516828 Actualización acumulativa 4 para SQL Server Compact 3.5 Service Pack 2
Solución
Para evitar este problema, vuelva a escribir la consulta utilizando uno de los métodos siguientes:

Método 1

Utilice las sugerencias de tabla en la consulta para deshabilitar los índices. Por ejemplo, ejecute la consulta siguiente para deshabilitar los í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)) ONT1.C1 = T2.C1AND (T1.C2 = T2.C2 OR T2.C2 = -1)GO 

Método 2

Escribir la consulta para evitar que cumplan las condiciones que se mencionan en la sección "Síntomas":
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)
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Se refiere a:".

Warning: This article has been translated automatically

Propiedades

Id. de artículo: 2494715 - Última revisión: 04/27/2011 09:17:00 - Revisión: 2.0

  • kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 KbMtes
Comentarios
mp;did=1&t=">/html>