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

Seleccione idioma Seleccione idioma
Id. de artículo: 2494715
Expandir todo | Contraer todo

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
)
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
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 ON
T1.C1 = T2.C1
AND (T1.C2 = T2.C2 OR T2.C2 = -1)
GO
Después de ejecutar la consulta, recibirá el siguiente resultado incorrecto:
Contraer esta tablaAmpliar esta tabla
T1.C1T1.C2T2.C1T2.C2
2020
Sin embargo, que espera el resultado siguiente:
Contraer esta tablaAmpliar esta tabla
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 ON
T1.C1 = T2.C1
WHERE T1.C2 = T2.C2 OR T2.C2 = -1
GO

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)) ON
T1.C1 = T2.C1
AND (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:".

Propiedades

Id. de artículo: 2494715 - Última revisión: miércoles, 27 de abril de 2011 - Versión: 2.0
Palabras clave: 
kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 KbMtes
Traducción automática
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

Enviar comentarios

 

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