J'ai rencontré un débordement arithmétique dans une simple instruction SELECT. La requête était comme ci-dessous, par exemple
SELECT [SaleValue] FROM Sales
[SaleValue]
était de type de données decimal(9,0)
et non une colonne calculée.
La raison en est que, d'une manière ou d'une autre, la colonne avait une ligne où ce champ stockait une valeur PLUS GRANDE que le type de données spécifié, par exemple decimal(10,0)
.
Je n'ai pu faire fonctionner la sélection que lorsque j'ai augmenté la taille de la colonne. Le tableau en question a deux autres instances dans deux autres colonnes et lignes.
Comment cette situation était-elle possible? Comment une valeur hors plage a-t-elle été enregistrée dans la colonne en premier lieu?
J'utilise Microsoft SQL Server + ceci est une table de base, pas une vue.
decimal
- undecimal(9,0)
devrait occuper 5 octets, undecimal(10,0)
9. Donc, je pense qu'il est moins probable que vous puissiez le faire en modifiant les tables système car vous n'aurez pas la taille de stockage correcte pour les données de chaque ligne.Réponses:
Cela peut se produire de plusieurs manières, par exemple, comme décrit dans Dépannage de l'erreur DBCC 2570 dans SQL Server 2005 et versions ultérieures :
Cet article contient de nombreuses informations utiles sur le sujet. Pour les bases, consultez la documentation de
DBCC CHECKDB
et l'DATA_PURITY
option en particulier.la source