Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Es kann keine Zeile der Größe 8937 erstellt werden, die größer als das zulässige Maximum von 8060 ist

Der Fehler wird verursacht, weil Sie in SQL Server keine Zeile haben können, die größer als 8 KB (die Größe von 1 Seite) ist, da Zeilen nicht über Seiten reichen dürfen - dies ist eine grundlegende Grenze von SQL Server, Sie können hier mehr darüber lesen:

Beachten Sie, dass Sie mit SQL Server die Tabelle erstellen können. Wenn Sie jedoch versuchen, tatsächlich Daten einzufügen, die sich über mehrere Seiten erstrecken, wird der obige Fehler ausgegeben.

Das passt natürlich nicht ganz zusammen, denn wenn das obige die ganze Wahrheit wäre, dann einzelnes VARCHAR(8000) Spalte würde eine Zeile in einer Tabelle füllen! (Das war früher so). SQL Server 2005 umging diese Einschränkung, indem es zuließ, dass bestimmte Daten aus einer Zeile auf einer anderen Seite gespeichert wurden, und stattdessen einen 24-Byte-Zeiger beließ. Hier können Sie darüber lesen:

Wie Sie sehen können, bedeutet dies jetzt, dass Zeilen jetzt mehrere Seiten umfassen können, einzelne Spaltenzeilen jedoch immer noch auf eine einzelne Seite passen müssen (daher ist die maximale Größe einer Spalte VARCHAR(8000)). ) und es gibt immer noch eine Grenze für die Gesamtzahl solcher Spalten, die Sie haben können (ungefähr 8000 / 24 =~ 300 nach meiner Schätzung)

Natürlich verfehlt das alles den Hauptpunkt, nämlich dass 400 breite Spalten auf einer einzigen Tabelle absurd sind!!!

Sie sollten sich Ihr Datenbankschema genau ansehen und sich etwas Vernünftigeres einfallen lassen - Sie könnten damit beginnen, konservativere Schätzungen für Spaltengrößen zu wählen (wie VARCHAR(255)). oder VARCHAR(50) ), aber Sie müssen einige dieser Felder wirklich in separate Tabellen aufteilen.