Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Không thể tạo hàng có kích thước 8937 lớn hơn mức tối đa cho phép là 8060

Lỗi xảy ra do bạn không thể có một hàng trong máy chủ SQL lớn hơn 8KB (kích thước của 1 trang) vì các hàng không được phép kéo dài các trang - đó là giới hạn cơ bản của SQL Server, bạn có thể đọc thêm về nó tại đây:

Lưu ý rằng máy chủ SQL sẽ cho phép bạn tạo bảng, tuy nhiên nếu bạn cố gắng thực sự chèn bất kỳ dữ liệu nào kéo dài nhiều trang thì nó sẽ gây ra lỗi ở trên.

Tất nhiên điều này không hoàn toàn bổ sung, bởi vì nếu ở trên là toàn bộ sự thật thì VARCHAR(8000) duy nhất cột sẽ điền vào một hàng trong một bảng! (Điều này đã từng là trường hợp). SQL Server 2005 đã khắc phục được hạn chế này bằng cách cho phép một số dữ liệu nhất định từ một hàng được lưu trữ trong một trang khác và thay vào đó để lại một con trỏ 24 byte. Bạn có thể đọc về điều này tại đây:

Như bạn có thể thấy, điều này có nghĩa là các hàng hiện có thể kéo dài nhiều trang, tuy nhiên các hàng cột đơn vẫn cần phải vừa với một trang (do đó kích thước tối đa của một cột là VARCHAR(8000) ) và vẫn có giới hạn về tổng số cột như vậy mà bạn có thể có (khoảng 8000/24 ​​=~ 300 theo ước tính của tôi)

Tất nhiên, tất cả điều này đều thiếu điểm chính, đó là 400 cột rộng trên một bảng là vô lý !!!

Bạn nên xem xét kỹ lược đồ cơ sở dữ liệu của mình và tìm ra thứ gì đó hợp lý hơn - bạn có thể bắt đầu bằng việc chọn một số ước tính thận trọng hơn về kích thước cột (như VARCHAR(255) hoặc VARCHAR(50) ), nhưng bạn thực sự cần phải chia một số trường đó thành các bảng riêng biệt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi JDBC của SQL Server trên Java 8:Trình điều khiển không thể thiết lập kết nối an toàn với SQL Server bằng cách sử dụng mã hóa Lớp cổng bảo mật (SSL)

  2. nối cột dữ liệu được phân tách bằng dấu phẩy

  3. JBoss kết nối lại khi hết thời gian kết nối

  4. Toán tử T-SQL XOR

  5. Có thể chạy nhiều câu lệnh DDL bên trong một giao dịch (trong SQL Server) không?