En un equipo que tiene Microsoft Data Access Components 2.8 instalado, una aplicación recibe un valor incorrecto para la columna de identidad de una base de datos de SQL Server 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 940569 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Tenga en cuenta la situación siguiente. Crear una tabla que tiene una columna de identidad en una base de datos de Microsoft SQL Server 2005. Configurar la duplicación de mezcla en la tabla. Una aplicación utiliza ActiveX Data Objects (ADO) para insertar una fila en la tabla. A continuación, la aplicación recupera la fila insertada. Sin embargo, se devuelve un valor incorrecto para la columna de identidad.

Este problema se produce cuando el equipo que ejecuta la aplicación tiene uno de los siguientes instalados:
  • Windows Server 2003
  • Windows XP
  • Microsoft Data Access Components 2.8 (MDAC 2.8)
Este problema no se produce en una base de datos de Microsoft SQL Server 2000.

Causa

El proceso de replicación crea desencadenadores de inserción en la tabla. Cuando se insertan datos en la tabla, los desencadenadores de inserción utilizan @@ IDENTITY variable en lugar de la función SCOPE_IDENTITY . Por lo tanto, el @@ IDENTITY variable puede devolver un valor de identidad que no está en la tabla actual.

Solución

Para resolver este problema, instale la revisión que se describe en el siguiente artículo de Microsoft Knowledge Base:
961451REVISIÓN: Recibe un valor incorrecto cuando consulta el valor de identidad insertado última después de utilizar un cursor de cliente para insertar datos en una tabla que contiene una columna de identidad en una aplicación que utiliza ActiveX Data Objects
Nota La revisión que se describe en la sección "Solución" en la versión anterior de este artículo se reemplazó por la revisión descrita en 961451.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Más información

La función SCOPE_IDENTITY y @@ IDENTITY variable devuelven los últimos valores de identidad que se generan en cualquier tabla en la sesión actual. Sin embargo, la función SCOPE_IDENTITY devuelve valores que se insertan sólo dentro del ámbito actual. @@ IDENTITY variable no limita la inserción de un ámbito específico.

Por ejemplo, suponga que la base de datos contiene un Table1 y Table2 un. Ambas tablas tienen columnas de identidad. Un desencadenador de inserción se define en Table1. Cuando se inserta una fila en Table1, el desencadenador inserta una copia de la fila en tabla2. Esta situación implica que los dos ámbitos siguientes:
  • Inserción en Table1
  • Inserción de tabla2 el desencadenador
En este escenario, @@ IDENTITY variable y la función SCOPE_IDENTITY devuelven valores diferentes cuando se inserta una fila en Table1. @@ IDENTITY variable devuelve el último valor de columna de identidad que se inserta entre los ámbitos en la sesión actual. En este caso, @@ IDENTITY variable devuelve el valor de identidad que está insertado en tabla2. Sin embargo, la función SCOPE_IDENTITY devuelve el valor de identidad que se inserta en Table1, debido a la función SCOPE_IDENTITY devuelve el valor por última vez se inserta en el mismo ámbito. La función SCOPE_IDENTITY devuelve el valor NULL si la función se invoca antes de cualquier instrucción INSERT que se realizan en una columna de identidad se produzcan en el ámbito.

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

Propiedades

Id. de artículo: 940569 - Última revisión: martes, 25 de agosto de 2009 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional x64 Edition
  • Microsoft Data Access Components 2.8
Palabras clave: 
kbmt kbautohotfix kbwinxppresp3fix kbexpertiseinter kbwinserv2003postsp2fix kbbug kbfix kbhotfixserver kbqfe KB940569 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): 940569

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