Pelo que entendi, quando você define uma coluna em uma tabela, você define sua precisão. Essa precisão leva 1 byte e é armazenada no nível da coluna. Se você usar uma precisão de 5 ou mais, uma coluna DateTime2 terá 8 bytes por linha. (A precisão não é armazenada no nível da linha.)
Mas quando você converte esse mesmo DateTime2 como um VarBinary, levará 9 bytes. Isso ocorre porque ele precisa do byte de precisão armazenado no nível da coluna.
Estou curioso para saber como isso se relaciona quando um DateTime2 é armazenado na memória. Digamos que eu tenha 1.000.000 DateTime2s na memória (cada um com precisão de 5 ou mais). Isso vai ocupar 8.000.000 bytes de memória ou 9.000.000 bytes de memória?
Basicamente, eu gostaria de saber se um DateTime2 de precisão padrão causará mais pressão na expectativa de vida da página do que um DateTime normal?
Uma precisão padrão DATETIME2 não causará mais pressão no PLE em comparação com DATETIME. O conjunto de buffers consiste em páginas de 8 KB. A contagem de páginas é o que importa em oposição ao funcionamento de armazenamento interno de cada página. Não é realmente correto dizer que 1 milhão de valores de coluna levarão 8 milhões ou 9 milhões de bytes. Citando a documentação :
No SQL Server, os dados em disco são idênticos aos dados na memória*. As páginas de dados são copiadas do disco para a memória e vice-versa, o que seria caro se os dados fossem transformados durante a leitura ou limpeza.
8.000.000, já que armazenar uma página na memória não está relacionado à conversão de um DateTime2 para varbinary.
* Exceções: As tabelas OLTP na memória são uma exceção e são substancialmente diferentes na memória e no disco. E as tabelas de Criptografia de Banco de Dados Transparente são descriptografadas à medida que são lidas na memória e criptografadas à medida que são liberadas para o disco.
E conforme documentado para datetime2: