REVISIÓN: Una consulta SELECT inesperadamente devuelve un número incorrecto de filas en SQL Server 2005 Mobile Edition y en SQL Server 2005 Compact Edition

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): 933697
Síntomas
Cuando se ejecuta una consulta SELECT en Microsoft SQL Server 2005 Mobile Edition y en Microsoft SQL Server 2005 Compact Edition, la consulta devuelve inesperadamente un número incorrecto de filas. El problema se produce cuando se cumplen las condiciones siguientes:
  • La consulta SELECT contiene una combinación interna.
  • Una de las dos tablas que formen parte de tiene un índice en la columna combinada. La otra tabla no tiene ningún índice en cualquiera de sus columnas.
Por ejemplo, ejecutar la consulta siguiente en SQL Server 2005 Mobile Edition:
select * from T1, T2 where T1.Col = T2.Col1 order by T1.Col
Nota en este ejemplo, la tabla T1 tiene un índice en la columna columnas... tabla T2 no tiene un índice de columna Col1.
Causa
Este problema se produce porque el optimizador de consultas no descarta el plan anterior completamente. El optimizador de consultas considera varios planes de consulta antes de que el optimizador de consultas decide en el mejor plan para ejecutar una consulta. En algunos casos, el optimizador de consultas puede encontrar un plan que utiliza un índice para evaluar la condición. Sin embargo, el optimizador de consultas más adelante puede encontrar un plan mejor. En este caso, el optimizador de consultas descarta el plan anterior para utilizar el mejor plan.
Solución
Para resolver este problema, utilice uno de los métodos siguientes:
  • Crear un índice en la columna combinada en la segunda tabla.
  • Eliminar el índice de la columna combinada en la primera tabla.
Nota En el ejemplo de la sección "Síntomas", la columna combinada en la segunda tabla es T2.Col1. La columna combinada en la primera tabla es T1.Col.
Estado
Microsoft ha confirmado que se trata de un error de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".
Más información

Pasos para reproducir el problema

  1. Ejecute las instrucciones siguientes en una base de datos en SQL Server 2005 Mobile Edition:
    CREATE TABLE T1 (COL INT);GO;CREATE INDEX T1_IDX ON T1 (COL);GO;INSERT INTO T1 VALUES (1);INSERT INTO T1 VALUES (2);INSERT INTO T1 VALUES (3);GO;CREATE TABLE T2 (COL1 INT, COL2 INT);GO;INSERT INTO T2 VALUES (1,1);INSERT INTO T2 VALUES (2,2);INSERT INTO T2 VALUES (3,3);GO;
  2. Ejecute la siguiente instrucción:
    select * from T1, T2 where T1.Col = T2.Col1 order by T1.Col
    puede experimenta el problema que se describe en la sección "Síntomas".

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 933697 - Última revisión: 03/13/2007 19:39:22 - Revisión: 1.2

Microsoft SQL Server 2005 Mobile Edition, Microsoft SQL Server 2005 Compact Edition

  • kbmt kbtshoot kbexpertiseadvanced kbbug KB933697 KbMtes
Comentarios