Hoje eu me deparei com um problema a respeito dos recids… Quando eu tentava inserir um novo registro na tabela de parceiros comerciais (contactperson) o DAX me dizia que o registro já existia.

Abri o Sql Server Profiler para acompanhar a query de insert e pude observar que ele estava tentando usar um RECID que já havia sido usado anteriormente, ai precisei descobrir da onde vinham os recids…

1º Os recids ficam armazenados na tabela systemsequences, não aparece na seção de tabelas da aot, para visualizar você tem que ir até a aot, system documentation, tables -> SystemSequences.
Nesta tabela você encontra os campos:

Id
  • Tipo da sequencia.
  • Tipo de dados: Number(10)
  • Valores: -1, -2
    • -1: Sequencia de RecId
    • -2: Sequencia de Transação
NextVal
  • Proximo valor a ser usado quando um novo registro for criado.
MinVal
  • Valor minímo a ser criado
MaxVal
  • Valor maximo a ser criado
Cycle
  • Para especificar se pode recomeçar quando atingir o número maximo de registros (maxval)
Name
  • Nome….
DataAreaId
  • A dataareaid é sempre usada a DAT, neste caso, todas as empresas compartilham os mesmos registros

2º Criei uma tabela nova, chamada table_test, cujo o ID atribuído foi 50001;

3º Ao dar o comando para criar um novo registro, vi no profiler o seguinte comando:
“INSERT INTO SYSTEMSEQUENCES (ID,NEXTVAL,MINVAL,MAXVAL,CYCLE,NAME,TABID,DATAAREAID,RECVERSION,RECID)
VALUES (-1,5637144826,1,9223372036854775807,0,’SEQNO’,50001,’dat’,1,-1)”
Ou seja, o DAX inserindo um controle pra essa nova tabela que criei, dizendo que o proximo recid deve ser 5637144826

4º Ao efetivar o cadastro de um item, pude observar que o recid inserido não foi o que estava apontado para o nextval, mas sim o nextval + 250.

Enfim, o valor do proximo recid sempre será acrescido de 250 e ai sim é associado ao novo registro.

Question: A grande pergunta? Porque esse contro?
Answer: I don’t know! kkkk

Caso alguém ache o motivo, favor nos enviar.

[]s
Pichler