KB4135113: CORRECCIÓN: el registro de seguimiento de cambios es incoherente durante una actualización en una tabla que tiene un índice clúster o único en SQL Server

Se aplica a
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

Síntomas

Al ejecutar una actualización en una tabla que tiene un índice clúster o único y la actualización se produce en una columna única no principal, el registro de seguimiento de cambios es incoherente con la instrucción update.

Por ejemplo, suponga que una columna denominada "columna1" se incluye en el índice agrupado o único. Cuando se cambia el valor de la columna de mayor a menor valor (como cambiar el valor de 20 a 16), la tabla lateral de seguimiento de cambios recibe la operación de inserción antes de la operación de eliminación. Por ejemplo, la operación insertar registro de fila del registro de transacciones se recibe antes de la operación eliminar fila, o "I" se inserta antes de "D".

Sys_change_version sys_change_create_version sys_change_operation sys_change_column sys_change_context PK_column
1116 19 I NULL NULL 5639485628
1116 20 D NULL NULL 5639485628

Cuando el valor de la columna cambia de menor a mayor (como cambiar el valor de 16 a 20), se inserta "D" antes de "I".

Sys_change_version sys_change_create_version sys_change_operation sys_change_column sys_change_context PK_column
1126 32 D NULL NULL 5639485628
1126 33 I NULL NULL 5639485628

Causa

Este problema se produce debido a un orden incorrecto entre pares de eliminación e inserción en la tabla lateral de seguimiento de cambios.

Resolución

La corrección para este problema se incluye en las siguientes actualizaciones de SQL Server:

Actualización acumulativa 8 de SQL Server 2017

Actualización acumulativa 9 de SQL Server 2016 Service Pack 1

Actualización acumulativa 12 para SQL Server 2014 SP2

Acerca de las compilaciones de SQL Server

Cada nueva compilación de SQL Server contiene todas las revisiones y correcciones de seguridad que se encontraban en la compilación anterior. Te recomendamos que instales la compilación más reciente para SQL Server:

Actualización acumulativa más reciente de SQL Server 2017

compilación más reciente para SQL Server 2016

Actualización acumulativa más reciente de SQL Server 2014

Estado

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

Más información

Para una tabla habilitada para el seguimiento de cambios, cuando se produce una actualización en una columna no principal que se define como única, se insertan dos entradas en la tabla lateral de seguimiento de cambios: una entrada para cada una de las acciones de división, Insertar y Eliminar.

Cuando se llama a la función CAMBIARTABLE para enumerar los cambios, estas entradas se ordenan por valores de clave principal y, a continuación, las operaciones se agregan. Si la actualización inserta un valor inferior, se ejecuta primero una operación "I" en la tabla lateral, seguida de una operación "D". Esto provoca que se devuelva una operación incorrecta para esta fila. Esto se debe a que "I" seguido de "D" se agrega como "D".

Dado que solo se mantienen los valores de clave principal en las tablas laterales, no es necesario tener dos entradas independientes. Esto es así siempre y cuando no se actualice la columna de clave principal.

Este problema se ha corregido para las columnas únicas no principales. En este caso, cuando se produce la actualización, solo se inserta una fila con "U" como operación de actualización en lugar de dos entradas que tengan "D" e "I".

Referencias

Obtén información sobre la terminología que Microsoft usa para describir las actualizaciones de software.