Síntomas
Al ejecutar una actualización en una tabla que tiene un índice agrupado 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 (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.
Solució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
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
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica 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.