Symptômes
Vous modifiez le type de données d’une colonne d’une table de base de données à partir de la base de données ntext en fonction du type de données (max) sur un serveur exécutant Microsoft SQL Server 2012, 2014 ou 2016. Lorsque vous mettez à jour le tableau en ajoutant plus de 4 000 enregistrements, DBCC CHECKDB peut signaler des erreurs similaires à ce qui suit :
MSG 8961, niveau 16, état 1, LineNumber Erreur de table : ObjectID, IndexID, PARTITIONID, allocUnitID (données métier de type). Le nœud de données hors ligne de la page (pageid), slot 0, textID ne correspond pas à sa référence à partir de la page (pageid), slot 0. MSG 8961, niveau 16, état 1, LineNumber Erreur de table : ObjectID, IndexID, PARTITIONID, allocUnitID (données métier de type). Le nœud de données hors ligne de la page (pageid), slot 0, textID ne correspond pas à sa référence à partir de la page (pageid), slot 0. MSG 8929, niveau 16, état 1, LineNumberObjectID, IndexID, PartitionID, allocUnitID (type de données dans la ligne) : Erreurs détectées dans les données de non-ligne avec ID possédé par l’enregistrement de données identifié par RID = (RID) Résultats DBCC pour'TableName'. Il y a 1 lignes en 1 pages pour l’objet «TableName». CHECKTABLE a détecté des erreurs d’allocation de 0 et 3 erreurs de cohérence dans la table'TableName' (ObjectID). repair_allow_data_loss est le niveau de réparation minimum pour les erreurs trouvées par DBCC CHECKTABLE (DatabaseName. TableName). Exécution DBCC terminée. S’il s’agit de messages d’erreur d’impression DBCC, contactez votre administrateur système.
Résolution
Ce problème a été résolu dans les mises à jour cumulatives de SQL Server suivantes :
Mise à jour cumulative 5 pour SQL Server 2016 RTM
Mise à jour cumulative 2 pour SQL Server 2016 SP1
Mise à jour cumulative 4 pour SQL Server 2014 SP2
Mise à jour cumulative 11 pour SQL Server 2014 SP1
Mise à jour cumulative 7 pour SQL Server 2012 Service Pack 3
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs et correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :
Dernière mise à jour cumulative pour SQL Server 2016
Solution de contournement
Pour contourner ce problème une fois que vous avez modifié le type de données, définissez l’option types de valeurs en dehors des lignes sur 1.
ALTER TABLE TableName ALTER COLUMN COLUMN_NAME nvarchar(max) NOT NULL
go
exec sp_tableoption 'TableName', 'large value types out of row', '1'
Statut
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.
Références
Apprenez-en davantage sur la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.