Migrei um banco de dados do SQL Server 2008R2 para o SQL Server 2019 (ambos Enterprise Edition) usando a técnica de restauração de backup e um conjunto de ações pós-transferência como DBCC UPDATEUSAGE
ou UPDATE STATISTICS XXX
.
Na atualização das estatísticas, recebo o seguinte erro:
Msg 402, Level 16, State 1, Procedure ZZZZ, Line 5 [Batch Start Line 0]
The data types datetime and time are incompatible in the add operator.
Msg 4413, Level 16, State 1, Line 1
Could not use view or function 'ZZZZ' because of binding errors.
Eu sei que a mensagem é bastante explícita (a visão, que estava sintaticamente correta em 2008R2 não está mais em 2019). Não entendo por que uma exibição definida WITH SCHEMABINDING
como inválida impediria a atualização de estatísticas em uma tabela subjacente.
Além disso, recebo a mesma mensagem de erro ao consultar a tabela subjacente com uma WHERE
cláusula, exceto se eu forçar um FULLSCAN com a seguinte dica:
OPTION(TABLE HINT( $mytable, FORCESCAN ))
Eu sei que o SQL Server irá disparar um erro em caso de alteração de DDL para objetos vinculados ao esquema subjacentes, mas não entendo por que, se a exibição for inválida, os objetos subjacentes não poderão ser usados normalmente.
Tenho certeza de que há uma explicação (como os mecanismos de proteção para exibições vinculadas ao esquema não podem ser processadas devido à invalidez da exibição), mas não consigo encontrá-la com certeza na documentação.
Eu corri um DBCC CHECKDB
sem problema. Mudei o nível de compatibilidade para 150.