In einer einfachen SELECT-Anweisung bin ich auf einen arithmetischen Überlauf gestoßen. Die Abfrage war wie folgt, z
SELECT [SaleValue] FROM Sales
[SaleValue]
war vom Datentyp decimal(9,0)
und keine berechnete Spalte.
Der Grund dafür war, dass die Spalte irgendwie eine Zeile hatte, in der in diesem Feld ein Wert gespeichert war, der GRÖSSER als der angegebene Datentyp war, z decimal(10,0)
.
Ich konnte die Auswahl nur zum Laufen bringen, wenn ich die Spalte vergrößerte. Die betreffende Tabelle enthält zwei weitere Instanzen in zwei weiteren Spalten und Zeilen.
Wie war diese Situation möglich? Wie wurde überhaupt ein Wert außerhalb des Bereichs in der Spalte gespeichert?
Ich verwende Microsoft SQL Server + Dies ist eine Basistabelle, keine Ansicht.
decimal
- adecimal(9,0)
sollte 5 Bytes, adecimal(10,0)
9 belegen . Ich denke, es ist weniger wahrscheinlich, dass Sie dies durch Bearbeiten der Systemtabellen tun können, da Sie dies nicht haben die richtige Speichergröße für die Daten in jeder Zeile.Antworten:
Dies kann auf verschiedene Arten geschehen, z. B. wie unter Fehlerbehebung bei DBCC-Fehler 2570 in SQL Server 2005 und späteren Versionen beschrieben :
Dieser Artikel enthält viele nützliche Informationen zum Thema. Die Grundlagen finden Sie in der Dokumentation
DBCC CHECKDB
und insbesondere in derDATA_PURITY
Option.quelle