Realizar versionamento de registros, ou melhor, gravar o histórico de alterações de dados em uma base relacional, nunca foi algo trivial. Com a ascensão dos bancos de dados orientados a documentos, como MongoDB, a coisa ficou menos complexa. Porém, bancos relacionais estão espalhados por ai e a necessidade de tracking de mudanças continua.

Uso de Trigger

Solução mais comum.

Uso de XML/JSON

Já vi soluções que serializavam um objeto C# em XML e persistia o conteúdo em uma linha na tabela. O mesmo, nos dias de hoje pode se feito com JSON.

SQL Server 2016

Nesta versão a Microsoft lançou um recurso out-of-the-box. No artigo Create a system-versioned temporal table podemos entender mais sobre.

Para explorar mais