web-dev-qa-db-fra.com

Incapacité à interroger la table sous-jacente d'une vue reliée par le schéma

J'ai migré une base de données de SQL Server 2008R2 à SQL Server 2019 (SQL Enterprise Edition) à l'aide de la technique de restauration de sauvegarde et d'un ensemble d'actions post-transfert comme DBCC UPDATEUSAGE ou alors UPDATE STATISTICS XXX.

Lors de la mise à jour des statistiques, je reçois l'erreur suivante:

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.

Je sais que le message est assez explicite (la vue, qui était syntaxiquement correcte sur 2008R2 n'est plus en 2019). Je ne comprends pas pourquoi une vue définie WITH SCHEMABINDING Cela n'est pas valide empêcherait la mise à jour des statistiques sur une table sous-jacente.

De plus, je reçois le même message d'erreur lorsque vous interrogeez la table sous-jacente avec une clause WHERE, sauf si je force une forte escalade avec un indice suivant:

OPTION(TABLE HINT( $mytable, FORCESCAN ))

Je sais que SQL Server déposera une erreur en cas de modification DDL pour sous-jacents aux objets liés au schéma sous-jacents, mais je ne comprends pas pourquoi, si la vue est invalide, les objets sous-jacents ne peuvent pas être utilisés comme d'habitude.

Je suis sûr qu'il y a une explication (comme les mécanismes de protection pour les vues liés au schéma ne peuvent pas être traités en raison de la nullité de la vue), mais je ne trouve pas de la sorte dans la documentation.

J'ai couru un DBCC CHECKDB sans problème. J'ai changé le niveau de compat à 150.

8
Jefferson B. Elias

En ce qui concerne lorsque vous interrogez la table sous-jacente, l'optimiseur produit peut-être un plan qui utilise l'index de vue au lieu de la table?

Le plan d'exécution doit vous dire ou essayer la vues expandes indique.

4
Tibor Karaszi