Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server 2012:discrepâncias DATETIME entre inserções e gatilhos


Devido à natureza declarativa do SQL, o mecanismo de banco de dados pode tome a liberdade de avaliar partes de uma instrução SQL na ordem que achar melhor (desde que não afete a semântica). Sua sugestão de que GETUTCDATE() pode ser armazenado em cache, é plausível.

Eu sei que isso não responde a sua pergunta. Mas qualquer que seja a implementação de GETUTCDATE no SQL2012, isso pode mudar em uma versão futura. Portanto, evite confiar nele, ou atualizações futuras podem se tornar uma verdadeira dor. Implemente sua lógica de uma maneira que não dependa de nenhuma suposição sobre a ordem de avaliação.

No seu caso específico, vejo algumas soluções possíveis.
  1. Se você não tiver problemas com OwningStatuses tendo um tempo um pouco mais tarde do que UserStatusesHistory , já pode ajudar se você enviar a terceira etapa para o SQL Server como um lote separado.
  2. Troque as etapas 2 e 3; e deixe a consulta de gatilho OwningStatuses em vez de inventar sua própria data.
  3. Pare de usar gatilhos; há mais de um motivo para considerar isso.