Comportamento do tipo de coluna 'DateTime2' entre SQL 2014 e SQL 2022. Isso foi encontrado quando o cálculo do nosso aplicativo para a diferença de data e hora das colunas do tipo DateTime2 deu errado.
Tentei descobrir no Google se haveria uma configuração específica na propriedade do servidor para colunas do tipo datetime2, mas sem sorte.
Percebido - Melhorias no DateTime2 É declarado que o comportamento é esperado. O Datetime2 com SQL 2014 tem precisão 7 com apenas os primeiros 3 dígitos atualizados, enquanto agora é 7 com SQL 2022 atualizado para todos os 7 dígitos. E então os cálculos com os campos datetime2 estão virando uma bagunça após a atualização.
Agora, há muitas colunas em muitas tabelas que foram definidas como datetime2. Levaria tempo para corrigir todas as consultas, códigos de aplicação.
Haverá alguma solução simples para isso?
A correção mais simples é converter ou converter
DateTime2
colunas para uma precisão uniforme comoDATETIME2(3)
em suas consultas, no entanto, isso é de curto prazo. Você pode usar a funçãoCONVERT
orCAST
para imitar funções do SQL Server 2014. Um exemplo:SELECT DATEDIFF(MILLISECOND,
CAST(Column1 AS DATETIME2(3)),
CAST(Column5 AS DATETIME2(3))) AS DiffMilliseconds
FROM YourTable;
Isso garantirá a consistência e evitará alterações no código do aplicativo à medida que você se adapta gradualmente.
A única 'solução simples' é executar o banco de dados em um nível de compatibilidade abaixo de 130 até que seu código esteja pronto para as mudanças comportamentais.
Por exemplo:
Você verá que seu problema desaparecerá.
Claro, você perderá facilidades disponíveis somente no 130 (e acima). Um resumo está disponível em Diferenças entre o nível de compatibilidade 120 e o nível 130 como ponto de partida.
Perguntas e respostas relacionadas: Comparação incorreta de datetime e datetime2
Meu artigo: Não misture com Datetime
Uma versão anterior da sua pergunta tinha uma demonstração de código. Você estava inserindo em uma
datetime2
coluna usandoselect getdate()
como fonte — uma função que retornadatetime
notdatetime2
.É aí que a conversão acontece e por isso a situação que descrevo — comparando
datetime
— édatetime2
relevante.