sql >> Databasteknik >  >> RDS >> Sqlserver

Det går inte att skapa en rad med storlek 8937 som är större än det tillåtna maxvärdet på 8060

Felet orsakas av att du inte kan ha en rad i SQL Server som är större än 8KB (storleken på 1 sida) eftersom rader inte tillåts sträcka sig över sidor - det är en grundläggande gräns för SQL Server, du kan läsa mer om det här:

Observera att SQL-servern tillåter dig att skapa tabellen, men om du försöker infoga data som sträcker sig över flera sidor kommer det att ge ovanstående fel.

Naturligtvis stämmer detta inte riktigt, för om ovanstående var hela sanningen så är det enkla VARCHAR(8000) kolumn skulle fylla en rad i en tabell! (Detta var tidigare fallet). SQL Server 2005 kom runt denna begränsning genom att tillåta vissa data från en rad att lagras på en annan sida, och istället lämna en 24-byte pekare. Du kan läsa om detta här:

Som du kan se betyder detta nu att rader nu kan sträcka sig över flera sidor, men enstaka kolumnrader måste fortfarande passa in på en enda sida (därav den maximala storleken på en kolumn är VARCHAR(8000) ) och det finns fortfarande en gräns för det totala antalet sådana kolumner du kan ha (cirka 8000 / 24 =~300 enligt min uppskattning)

Naturligtvis saknar detta allt huvudpoängen, som är att 400 breda kolumner på ett enda bord är absurt!!!

Du bör ta en lång titt på ditt databasschema och komma på något mer rimligt - du kan börja med att välja några mer konservativa uppskattningar av kolumnstorlekar (som VARCHAR(255) eller VARCHAR(50) ), men du behöver verkligen dela upp några av dessa fält i separata tabeller.



  1. infoga i tabellen välj max(kolumnnamn)+1

  2. MySQL LIKE %string% inte riktigt förlåtande nog. Något annat jag kan använda?

  3. MySql kopieringsvärde från en rad till en annan

  4. Hur konverterar man ett heltal (tid) till TT:MM:SS::00 i SQL Server 2008?