Chyba je způsobena tím, že na serveru SQL nemůžete mít řádek, který je větší než 8 kB (velikost 1 stránky), protože řádky nesmějí překrývat stránky - to je základní limit SQL Serveru, více si o něm můžete přečíst zde:
Všimněte si, že SQL server vám umožní vytvořit tabulku, ale pokud se pokusíte skutečně vložit data, která zahrnují více stránek, zobrazí se výše uvedená chyba.
To samozřejmě nedává dohromady, protože pokud by výše uvedené byla celá pravda, pak jeden VARCHAR(8000)
sloupec by vyplnil řádek v tabulce! (Bývalo tomu tak). SQL Server 2005 toto omezení obešel tím, že umožnil uložení určitých dat z řádku na jinou stránku a místo toho ponechal 24bajtový ukazatel. Můžete si o tom přečíst zde:
- Jak Sql Server 2005 obchází 8KB řádek omezení velikosti
- Maximální velikost řádku na serveru SQL Server 2005 do limitu
Jak vidíte, nyní to znamená, že řádky mohou nyní zahrnovat více stránek, avšak řádky s jedním sloupcem se stále musí vejít na jednu stránku (proto je maximální velikost sloupce VARCHAR(8000)
) a stále existuje limit na celkový počet takových sloupců, které můžete mít (okolo 8000 / 24 =~300 podle mého odhadu)
Tomuto všemu samozřejmě chybí hlavní bod, kterým je, že 400 širokých sloupců na jedné tabulce je absurdní!!!
Měli byste se důkladně podívat na své schéma databáze a přijít s něčím rozumnějším – můžete začít výběrem konzervativnějších odhadů velikosti sloupců (jako VARCHAR(255)
nebo VARCHAR(50)
), ale opravdu potřebujete rozdělit některá z těchto polí do samostatných tabulek.