Existe uma maneira de impedir que uma coluna computada não persistente seja atualizada em uma transação?
Eu montei um exemplo que mostra que essas colunas podem ser atualizadas ao usar funções não determinísticas (neste caso getutcdate()
). Isso não quebra os requisitos de consistência de uma transação? Eu tentei usar níveis de transação para evitar isso (serializável e instantâneo), o que não ajudou.
Consulta:
set nocount on;
create table dbo.TransactionTest (
[Timestamp] datetime,
IsUpdated as case when datediff(second, [Timestamp], getutcdate()) >= 1 then 1 else 0 end
);
insert into dbo.TransactionTest ([Timestamp]) values (getutcdate());
begin tran
select *
from dbo.TransactionTest;
waitfor delay '00:00:01';
select *
from dbo.TransactionTest;
rollback
drop table dbo.TransactionTest;
Resultados:
Timestamp IsUpdated
----------------------- -----------
2017-03-19 00:44:28.130 0
Timestamp IsUpdated
----------------------- -----------
2017-03-19 00:44:28.130 1