Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous aide à contourner un problème qui se produit, car une procédure stockée dans une base de données qui utilise la fonctionnalité Query Data Store échoue régulièrement.
Version du produit d’origine : SQL Server 2016
Numéro de base de connaissances d’origine : 4465511
Symptômes
Examinez le cas suivant :
Vous disposez d’une base de données Microsoft SQL Server 2016 qui utilise la fonctionnalité magasin de données des requêtes.
Vous disposez d’une procédure stockée qui appelle une autre procédure stockée à l’aide de la
INSERT...EXECsyntaxe.La fonctionnalité magasin de données des requêtes exécute régulièrement le nettoyage automatique lorsqu’elle approche de sa taille maximale configurée. En outre, l’état du Query Data Store passe de
READ_WRITEàREAD_ONLY.
Dans ce scénario, l’exécution de procédure stockée parente échoue régulièrement et vous recevez un message d’erreur semblable à ce qui suit :
Msg 556, Level 16, State 2, Ligne LineNumber
INSERT EXEC a échoué parce que la procédure stockée a modifié le schéma de la table cible.
Cause
Le processus de nettoyage automatique supprime le plan de Query Data Store. La requête fait l’objet d’une recompilation, car le plan est manquant dans Query Data Store. Toutefois, le plan est toujours présent dans le cache de procédure. Par conception, lorsque l’opération de recompilation se produit, SQL Server lève l’erreur 556 pour empêcher l’exécution en double de la procédure enfant. Une telle opération en double entraînerait un retour de résultats incorrects.
Résolution
Informations sur le Service Pack pour SQL Server 2016
Ce problème est résolu dans le Service Pack suivant pour SQL Server :
Service Pack 3 pour SQL Server 2016
À propos des service packs pour SQL Server :
Les Service Packs sont cumulatifs. Chaque nouveau Service Pack contient tous les correctifs qui se trouvent dans les Service Packs précédents, ainsi que les nouveaux correctifs. Nous vous recommandons d’appliquer le dernier Service Pack et la dernière mise à jour cumulative pour ce Service Pack. Vous n’avez pas besoin d’installer un Service Pack précédent avant d’installer le dernier Service Pack. Reportez-vous au tableau 1 dans l’article suivant pour plus d’informations sur le dernier Service Pack et la dernière mise à jour cumulative :
Solution de contournement
Pour contourner ce problème, effectuez les étapes suivantes :
Augmentez la taille du Query Data Store. Cela réduit la fréquence ou la probabilité que le Query Data Store efface le plan et entre en
READ_ONLYmode de fonctionnement.Ajoutez la gestion des erreurs à votre code pour intercepter l’erreur 556, puis renvoyez la
INSERT EXECrequête.Effacez le cache de procédure lorsque le magasin de données de requête revient à l’état
READ_WRITEdepuisREAD_ONLY.
Informations supplémentaires
En raison des modifications apportées à Query Data Store dans Microsoft SQL Server 2017, ce problème ne se produit pas dans SQL Server 2017.