Tenho uma tabela em um banco de dados com três colunas: ID, Chave e Valor. Toda vez que atualizo o registro, tenho uma trigger que envia essas atualizações para outra tabela e cria um novo registro nela, cujo esquema é esse:
RowID (new ID field for this table, identity(1,1) column)
ID (from source table)
Key (from source table)
Value (from source table)
Version (integer)
Portanto, sempre que o primeiro registro da tabela é alterado, ele cria um novo registro no segundo com a tabela toda vez.
Para cada registro com um ID correspondente, desejo adicionar um número de versão incremental exclusivo. Se um registro com ID de 1 for inserido nesta tabela 5 vezes, esses registros devem ter números de versão de 1, 2, 3, 4 e 5. A maneira de fazer isso é por meio de uma subconsulta para números de versão existentes ou configurando uma partição, ou algo mais?
Obrigado.
Nesses casos, estou armazenando números de versão e usando integridade referencial para garantir que os números de versão comecem com 1 e não tenham lacunas. Como uso restrições, tenho certeza de que minha solução funciona em situações de alta simultaneidade. Eu descrevi esta abordagem neste artigo
Você não pode adicionar
rowversion
( http://msdn.microsoft.com/en-us/library/ms182776(v=sql.105).aspx ) a coluna à sua tabela auditada e armazenar esse número em outra tabela? É sequencial por definição, embora não comece com 1.existe um recurso interno para isso que requer manutenção mínima e é muito rápido, exceto que funciona com registros de data e hora.
se você pode trabalhar com carimbos de data/hora em vez da versão, recomendo isso em vez do trabalho manual.
https://learn.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables?view=sql-server-2017