Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nie można utworzyć wiersza o rozmiarze 8937, który jest większy niż dopuszczalne maksimum 8060

Błąd jest spowodowany tym, że nie możesz mieć wiersza w serwerze SQL, który jest większy niż 8KB (rozmiar 1 strony), ponieważ wiersze nie mogą rozciągać się na strony - to podstawowe ograniczenie SQL Servera, więcej o tym przeczytasz tutaj:

Zwróć uwagę, że serwer SQL pozwoli ci utworzyć tabelę, jednak jeśli spróbujesz faktycznie wstawić jakiekolwiek dane, które obejmują wiele stron, spowoduje to powyższy błąd.

Oczywiście to się nie zgadza, ponieważ gdyby powyższe było całą prawdą, to pojedynczy VARCHAR(8000) kolumna wypełniłaby wiersz w tabeli! (Tak było kiedyś). SQL Server 2005 ominął to ograniczenie, zezwalając na przechowywanie pewnych danych z wiersza na innej stronie, pozostawiając zamiast tego 24-bajtowy wskaźnik. Możesz o tym przeczytać tutaj:

Jak widać, oznacza to, że wiersze mogą teraz obejmować wiele stron, jednak wiersze pojedynczych kolumn nadal muszą zmieścić się na jednej stronie (stąd maksymalny rozmiar kolumny to VARCHAR(8000) ) i nadal istnieje limit całkowitej liczby takich kolumn, które możesz mieć (około 8000 / 24 =~300 według moich szacunków)

Oczywiście w tym wszystkim brakuje głównego punktu, który jest taki, że 400 szerokich kolumn na jednej tabeli to absurd!!!

Powinieneś dokładnie przyjrzeć się swojemu schematowi bazy danych i znaleźć coś bardziej rozsądnego - możesz zacząć od wybrania bardziej konserwatywnych szacunków dotyczących rozmiarów kolumn (takich jak VARCHAR(255) lub VARCHAR(50) ), ale naprawdę musisz podzielić niektóre z tych pól na osobne tabele.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utworzyć konto uwierzytelniania serwera SQL?

  2. Przekroczono poziom zagnieżdżenia wyzwalacza?

  3. sql jak rzucić zapytanie wybierające

  4. Dynamicznie wybierz kolumnę w zapytaniu SQL

  5. Wstawienie zbiorcze nie powiodło się Błąd konwersji danych zbiorczego ładowania (obcięcie)