Fehler beim Anlegen neuer Felder (maximale Datensatzlänge von 8060 Bytes erreicht)

~ 0 min
01.09.2023 12:41

Problem:

Der SQL-Server kann pro SQL-Tabelle eine maximale Datensatzlänge von 8060 Bytes verwalten. Diese Grenze ist im SQL Server festgelegt und kann nicht erweiter werden.

Daher ist die Anzahl an Felder in AG-VIP SQL durch den SQL-Server begrenzt.

Die Anzahl der benötigten Bytes je Spalte in einer Tabelle ist abhängig von dem jeweiligen Datentyp:

Datentyp Größe der Spalte in Bytes im SQL Server
Text Textlänge oder maximal 24 Zeichen
längere Textspalten werden extra Tabellen ausgelagert.
Datum/Zeit 8
Datum 3
Zeit 3
Numerisch 8
Ganzzahl 4
Logisch 1
GUID 8
ID / Kennzeichen 4

 

 

 

 

 

 

Darstellung in AG-VIP SQL:

In der Administration der Adresstabellen, wird bei der jeweiligen Adress-/Projekt-/Zusatztabelle oben rechts die aktuelle Feldanzahl und die genutzte Datensatzlänge angezeigt.

Wird die maximale Größe überschritten, wird die entsprechende Zahl rot und es erfolgt eine Warnung.

Sollte Sie beim Anlegen von Feldern Datensatzlänge die maximale Länge von 8060Bytes überschreiten, kann trotzdem der Benutzer das Risiko eingehen und das Feld anlegen.

Der SQL Server kann sehr effektiv und dynmaisch Spalten in Tabellen verwalten.

Dies kann jedoch dazu führen, dass Inhalte nicht komplett gespeichert werden können und es zu einem SQL Fehler beim Anlegen der Spalten kommt.

Lösung:

Wenn man einmal dieses Limit erreicht hat, reicht es nicht aus entsprechend viele Felder zu löschen, da der SQL-Server nicht automatisch in der Lage ist, den reservierten Speicher für die gelöschten Felder wieder freizugeben.

Beim Löschen von Feldern entstehen in der Datenbank Zeile Lücken, die nicht automatisch durch den SQL Server wiederverwendet werden können.

Um nicht benutzten Platz wieder zugänglich zu machen um evtl. Platz für neue Felder zu schaffen muss noch auf dem SQL-Server direkt über das Management Studio der folgende Befehl ausgeführt werden:

Syntax:

dbcc cleantable ('<Name der Datenbank>','<Name der betroffenen Tabelle>')

Beispiel:

dbcc cleantable ('AGVIP','tblAS0003')

ist die aktuelle Datenbank im Management Studio ausgewählt, kann anstatt des Datenbanknames 0 verwendet werden.

dbcc cleantable (0,'tblAS0003')

Erst durch den cleantable Aufruf wird die Tabelle reorganisiert und nicht mehr benötigte Speicher in der Zeile freigegeben.
Danach können evtl. neue Felder wieder angelegt werden.

Erscheint die Fehlermeldung allerdings wieder, ist vermutlich das physikalische Limit des SQL Servers erreicht und Sie können eine weiteren Spalten anlegen.

Durchschnittliche Bewertung 4.67 (3 Abstimmungen)

Kommentieren nicht möglich