REVISIÓN: Mensaje de Error en SQL Server 2008 cuando ejecuta una instrucción INSERT SELECT en una tabla: "infracción de restricción PRIMARY KEY '< PrimaryKey >'. No se puede insertar una clave duplicada en el objeto '< nombreTabla >' "

Microsoft distribuye correcciones de Microsoft SQL Server 2008 como un archivo descargable. Como las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008.

Síntomas

Imagine el siguiente escenario:
  • Tiene Microsoft SQL Server 2008 instalado en un equipo multiprocesador.
  • Tiene una instrucción INSERT SELECT en una tabla que contiene una clave principal.

    Nota: En la instrucción INSERT SELECT , la tabla que recibe los datos es la misma tabla que genera los datos. Por ejemplo:
    INSERT T1 … SELECT T1
  • Hacer referencia a otras tablas en esta instrucción INSERT SELECT . Estas referencias incluyen una tabla temporal.

    Nota: Se hace referencia a las tablas en la cláusula FROM o se hace referencia a las tablas en una condición de la subconsulta o combinación.
Cuando se ejecuta la instrucción, recibirá el siguiente mensaje de error:

Msg 2627, nivel 14, estado 1

Infracción de restricción PRIMARY KEY 'PrimaryKey'. No se puede insertar una clave duplicada en el objeto 'nombreTabla'.

Si examina el plan de ejecución, verá que el operador JOIN y el operador Cola inmediata se ejecutan en paralelo. Este operador Cola inmediata está bajo el operador JOIN . Además, la tabla que recibe los datos de la instrucción es la tabla interna de la combinación.

Nota: Este problema también se produce al ejecutar la instrucción SELECT de la actualización o la instrucción SELECT de eliminar .

Causa

Este problema se produce debido a un error en la cola para el operador Cola inmediata donde la bobina genera más filas de lo esperado. Este comportamiento provoca un problema de clave duplicado.

Solución

Información de actualización acumulativa


La corrección para este problema en primer lugar se publicó en actualización acumulativa 3 para SQL Server 2008 Service Pack 1. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
971491 acum actualizar paquete 3 para SQL Server 2008 Service Pack 1
Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008. Microsoft recomienda que considere la posibilidad de aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:
970365 the SQL Server 2008 generaciones que se publicaron después del lanzamiento de SQL Server 2008 Service Pack 1
Las revisiones de Microsoft SQL Server 2008 se crean para determinados service Pack de SQL Server. Debe aplicar un hotfix de SQL Server 2008 Service Pack 1 en una instalación de SQL Server 2008 Service Pack 1. De forma predeterminada, cualquier hotfix suministrada en un service pack de SQL Server se incluye en el próximo service pack de SQL Server.

Información de la revisión

Ahora hay una revisión compatible de Microsoft. Sin embargo, se pretende corregir el problema que se describe en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico. Esta revisión puede ser sometida a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere al próximo service pack de SQL Server 2008 que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con los servicios de soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de números de teléfono de los servicios de soporte al cliente de Microsoft e información acerca de los costos de soporte técnico, visite el siguiente sitio Web de Microsoft:Nota: En casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

Requisitos previos

Para aplicar este hotfix, debe tener un equipo que ejecuta SQL Server 2008 Service Pack 1 (SP1).

Información de reinicio

No es necesario que reinicie el equipo después de aplicar este hotfix.

Información del registro

No es necesario cambiar el registro.

Información de archivo de hotfix

Este hotfix contiene sólo los archivos necesarios para corregir los problemas que se enumera en este artículo. Este hotfix no puede contener todos los archivos que debe tener para actualizar plenamente un producto a la compilación más reciente.

La versión en inglés de esta revisión tiene los atributos de archivo (o atributos del archivo más reciente) mostrados en la tabla siguiente. Las fechas y horas de estos archivos se muestran en la hora Universal coordinada (UTC). Al ver la información del archivo, se convierte en hora local. Para encontrar la diferencia entre la hora UTC y la hora local, utilice la ficha Zona horaria en el elemento de Fecha y hora del Panel de control.
Para todas las versiones basadas en x86 de motor de base de datos de SQL Server 2008
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Sqlaccess.dll2007.100.2712.0405,35213-May-200917:53x86
Keyfile.dll2007.100.2712.013,65613-May-200915:37x86
Sqlservr.exe2007.100.2712.042,729,32013-May-200917:56x86
Para todas las versiones basadas en x86 de SQL Server 2008 Analysis Services
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Msmdlocal.dll10.0.2712.023,461,72013-May-200916:08x86
Msmdsrv.exe10.0.2712.021,955,41613-May-200916:09x86
Keyfile.dll2007.100.2712.013,65613-May-200915:37x86
Msmdpump.dll10.0.2712.06,180,69613-May-200916:08x86
Msmdspdm.dll10.0.2712.0178,00813-May-200916:08x86
Msmgdsrv.dll10.0.2712.08,558,93613-May-200916:09x86
Msolap100.dll10.0.2712.06,532,95213-May-200916:09x86
Para todas las versiones basadas en x64 de motor de base de datos de SQL Server 2008
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Sqlaccess.dll2007.100.2712.0412,00814-May-200901:15x86
Keyfile.dll2007.100.2712.014,18413-May-200923:55x64
Sqlservr.exe2007.100.2712.057,873,25614-May-200901:17x64
Para todas las versiones basadas en x64 de SQL Server 2008 Analysis Services
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Msmdlocal.dll10.0.2712.023,461,72013-May-200916:08x86
Msmdlocal.dll10.0.2712.044,436,82414-May-200900:10x64
Msmdsrv.exe10.0.2712.043,713,36814-May-200900:10x64
Keyfile.dll2007.100.2712.014,18413-May-200923:55x64
Msmdpump.dll10.0.2712.07,430,48814-May-200900:10x64
Msmdspdm.dll10.0.2712.0178,02414-May-200900:10x86
Msmgdsrv.dll10.0.2712.08,558,93613-May-200916:09x86
Msmgdsrv.dll10.0.2712.012,332,37614-May-200900:11x64
Msolap100.dll10.0.2712.06,532,95213-May-200916:09x86
Msolap100.dll10.0.2712.08,153,94414-May-200900:11x64
Para todas las versiones compatibles basadas en Itanium de SQL Server 2008 Database Engine
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Sqlaccess.dll2007.100.2712.0398,69613-May-200917:01x86
Keyfile.dll2007.100.2712.019,30413-May-200915:26IA-64
Sqlservr.exe2007.100.2712.0111,042,40813-May-200917:08IA-64
Para todas las versiones compatibles basadas en Itanium de SQL Server 2008 Analysis Services
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Msmdlocal.dll10.0.2712.023,461,72013-May-200916:08x86
Msmdlocal.dll10.0.2712.057,508,18413-May-200915:44IA-64
Msmdsrv.exe10.0.2712.058,860,88813-May-200915:46IA-64
Keyfile.dll2007.100.2712.019,30413-May-200915:26IA-64
Msmdpump.dll10.0.2712.08,943,44813-May-200915:45IA-64
Msmdspdm.dll10.0.2712.0178,00813-May-200915:45x86
Msmgdsrv.dll10.0.2712.015,485,80013-May-200915:47IA-64
Msmgdsrv.dll10.0.2712.08,558,93613-May-200916:09x86
Msolap100.dll10.0.2712.010,065,24013-May-200915:47IA-64
Msolap100.dll10.0.2712.06,532,95213-May-200916:09x86

Solución alternativa

Para evitar este problema, establezca la sugerencia de consulta MAXDOP o la opción MAXDOP 1 en la instrucción o el nivel de servidor.

Nota: El nivel de servidor opción MAXDOP afecta al rendimiento de todas las consultas que se ejecutan en el servidor.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Referencias

Para obtener más información sobre el modelo de servicio Incremental de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

935897 un modelo de servicio Incremental está disponible en el equipo de SQL Server para entregar revisiones para problemas detectados



Para obtener más información acerca del esquema de nomenclatura para las actualizaciones de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

822499 Nuevo esquema de nomenclatura para los paquetes de actualización de software de Microsoft SQL Server


Para obtener más información acerca de la terminología de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684 descripción de la terminología estándar que se utiliza para describir las actualizaciones de software de Microsoft
Propiedades

Id. de artículo: 970507 - Última revisión: 13 ene. 2017 - Revisión: 1

Comentarios