KB2589980: corrección incorrecta o infracción de restricción cuando se ejecuta una instrucción SELECT o DML que usa la función row_number y un plan de ejecución paralelo en SQL Server 2008

Se aplica: SQL Server 2008

Microsoft distribuye las soluciones de Microsoft SQL Server 2008 como un archivo que se puede descargar. Debido a que las correcciones son acumulativas, cada versión nueva contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de SQL Server 2008 Fix.

Síntomas


Imagine la siguiente situación:
  • Ejecuta una consulta paralela que usa la función ROW_NUMBER en Microsoft SQL Server 2008.
  • Intenta ejecutar la consulta mediante una subconsulta que está dentro de una instrucción Select o una instrucción de lenguaje de manipulación de datos (DML).
En este escenario, tiene uno de los siguientes problemas:
  • Recibe resultados incorrectos si ejecuta la consulta dentro de la instrucción Select varias veces.
  • Es posible que la tabla contenga datos incorrectos si la consulta se ejecuta dentro de una instrucción DML. Si la tabla tiene restricciones, la instrucción podría producir un error con una infracción de restricción. Por ejemplo, una instrucción Insert puede dar error y se producirá un error de infracción de clave principal si la tabla tiene una clave principal.
Nota Estos problemas pueden ocurrir en una de las siguientes situaciones:
  • Establezca la opción de sugerencia de consulta MAXDOP en un valor mayor que 2.
  • Establezca la opción grado máximo de paralelismo en un valor mayor que 2 en configuración del servidor.

Resolución


Para resolver este problema, obtenga el Service Pack más reciente para SQL Server 2008. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
968382 Cómo obtener el Service Pack más reciente para SQL Server 2008

Solución


Para resolver este problema, utilice uno de los métodos siguientes:
  • Habilite la marca de seguimiento de 4134 si ha aplicado una de las siguientes actualizaciones:
    • Paquete de actualización acumulativa 6 para SQL Server 2008 o un paquete de actualización acumulativa posterior para SQL Server 2008
    • Paquete de actualización acumulativa 2 para SQL Server 2008 Service Pack 1 (SP1) o un paquete de actualización acumulativa posterior para SQL Server 2008 SP1
    Para obtener más información sobre cómo habilitar las marcas de seguimiento, visite el siguiente sitio web de MSDN:
  • Consulte la sección "solución" en el artículo 970198 de Microsoft Knowledge base. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    970198 CORRECCIÓN: recibe un resultado incorrecto cuando ejecuta una consulta que usa la función row_number en SQL Server 2008