Publicaciones etiquetadas ‘Recid’

Error TableId:%1, CurrentNextVal: %2, NewNextVal: %3

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en SQL Server

En algunas ocasiones me he encontrado que después de una caida del AOS de Axapta, debida algún error inesperado, al intentar insertar registros en una tabla nos muestra el siguiente error:

No se pueden asignar los números de secuencias a TableId:%1, CurrentNextVal:%2, NewNextVal: %3

Esto es debido a que por alguna extraña circustancia, en el momento de fallar el AOS, actualiza en la tabla systemSequences, como siguiente valor para el RecId, el número máximo permitido.
Ppodemos ver mediante la siguiente Select:

SELECT * FROM SYSTEMSEQUENCES ORDER BY NEXTVAL DESC

Donde podemos ver como para la Tabla 77 (CustTable), nos ha puesto como valor para el siguiente RecId 9223372036854775807, cuando el último RecId de nuestra tabla es 5637145355

Para arreglar este error, actualizaremos el campo NextVal, por el último RecId + 1 que tenga nuestra tabla, en este caso la tabla de Clientes.

UPDATE SYSTEMSEQUENCES SET NEXTVAL = 5637145356 WHERE TABID = 77

Crear indice RecId en tablas com ModifiedDateTime

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en SQL Server

En Dynamics Ax 2009, si utilizamos Microsoft SQL Server 2005 como motor de base de datos, tenemos que crear el indice por RecId en todas aquellas tablas que tengamos configurado los de Fecha y Hora de Creación / Modificación.

Esto es debido a que cada vez que realizamos un Insert o Update en la base de datos, cuando la tabla tiene activos estos campos, se ejecuta la siguiente sentencia SQL

SELECT CreatedDateTime From (nombre de la tabla) Where RecId = (recid) and DataAreaid = (dataAreaid)

Si no tenemos un indice por RecId, para una simple sentencia de actualización de un registro, SQL realiza un scan de toda la tabla, siendo esto un grave problema de rendimiento en tablas con muchos registros

Si utilizamos como motores de base de datos SQL 2008 u Oracle, este problema no lo tendremos, ya que el kernerl utiliza parámetros de tipo OUTPUT en las sentencias para obtener los valores de creación y modificación de base de datos, no siendo necesara la creación de un indice por RecId