Hej! Den totala storleken på varje rad får inte vara hur stor som helst. Ursäkta en glad amatör, men jag förstår inte vad du menar. Byt fälttyp eller öka fältstorleken. Hade också tänkt på det, men eftersom det fungerat tidigare och det teoretiskt skulle vara tillräckligt med nVarchar hade jag inte ändrat. Hej! Som sagt så är maximala längden för en rad i SQL Server 8060 bytes, tänk 8 kB minus lite house-keeping grejer. När du använder nvarchar/varchar så anger du att ditt fält kommer att variera i storlek, därför tillåter SQL Server att du skapar ett antal varchar fält vars sammanlagda storlek överstiger 8060 bytes. När man som du nu lägger in mycket data i många fält så går man över gränsen och då klagar databasen. Tack för svaren, jag är nu övertygad om att det är ett byte av datatyp till nText som gäller. Men, som Kalle skriver, att halva databasen försvann har inte med detta att göra. Måste först få reda på varför det skedde. Det var alltså info i en hel massa fält som inte hade med de fälten där jag ändrat datatyp att göra som försvann.SQL Server Cannot create a row of size 8231 which is greater than the allowable
Jag uppdaterar min SQL Server databas via Inernet. Plötsligt går det inte att uppdatera två av tre likadana textfält. De har datatyp nVarchar vilket skall ge möjlighet att spara 4000 tecken. Hade inställt på 2000 och då sparat max ca 1300 tecken i fälten. Nu tar den inte ens emot en text som har 1007 tecken utan ger följande felmeddeland:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Cannot create a row of size 8231 which is greater than the allowable maximum of 8060.
/adm4/hups.asp, line 6
På rad 6 som den refererar till finns följande:
Conn.Execute(sql)
Någon som har en idé om vad det kan bero på?
Jag har lite html kod i den text jag skall spara, kan det påverka?
Hälsningar
Magnus BSv: SQL Server Cannot create a row of size 8231 which is greater than the allowa
Testa att minska antalet på kolumnen till typ 1500 och se om det inte fungerar bättre, alternativ minska en annan kolumn i samma tabellSv: SQL Server Cannot create a row of size 8231 which is greater than the allowa
Försökte med att göra ett nytt inmatningsformulär som bara innehåller ett textfält för att enbart uppdatera en enda uppgift, men fick samma svar.
Hur gör man för att bestämma hur stor en rad är? Det luriga är att det ju fungerat tidigare, men slutat fungera utan att jag gjort några ändringar...
MagnusSv: SQL Server Cannot create a row of size 8231 which is greater than the allowa
Gå in i enterprise manager, högerklicka på tabellen och välj modify. Sen ser du hur stort fältet får vara. Om det är ett varcharfält eller liknande och du behöver få in stora textmassor - ändra fältet till ntext så får du in ca 2GB.
Du kan också när du skriver in datat välja left(data,8000) så får du inte felmeddelandet men då klipps texten.
Sen om du har en lagrad procedur när du kör insert eller update så kan du även där deklarera hur stort fältet får vara. Om det är sagt vara mindre än tabellens fält får du också detta fel, fast då från sp:n och inte tabellen.Sv: SQL Server Cannot create a row of size 8231 which is greater than the allowa
Nåväl, jag följde din reckomendation. Eftersom det kom upp en varningsruta att info kunde gå förlorad testade jag först på ett fält som inte hade så betydelsefull info. Det gick bra, så jag fortsatte med fälten där jag behöver skriva in längre text. Då försvann halva databasen! IT-Norr har nu läst in backupen och konstaterat att det är något mystiskt fel med databasen. Ingen programmeringssak med andra ord.
Tack.
/MagnusSv: SQL Server Cannot create a row of size 8231 which is greater than the allowa
Du bör se till att aldrig ha så stora kolumner att det ens kan bli mer än 8060 bytes per rad. Ett nvarchar fält tar upp ca 2 bytes per tecken. Behöver du mer än så så kan du antingen använda ntext som Pelle föreslog, eller dela upp informationen på flera rader.
Att halva databasen försvann lär knappast ha med detta problem att göra.
/KalleSv: SQL Server Cannot create a row of size 8231 which is greater than the allowa
Jag antar att du har flera fält med info i och det är när du utökar ett av dessa fält som du får fel.
Precis som pelle föreslog så är det enklaste att byta till ntext, då har du (nästan) obegränsad längd. Orsaken till detta är att ntext inte lagras tillsammans med annan data på raden, så det ingår inte när SQL Server kontrollerar mot 8060 gränsen. Den enda nackdelen kan vara att det i en riktigt högpresterande applikation kan ta aningen längre att hämta infon från databasen (vi pratar någon ms extra).
/MattiasSv: SQL Server Cannot create a row of size 8231 which is greater than the allowa
/Magnus