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:
- Cách Sql Server 2005 bỏ qua hàng 8KB giới hạn kích thước
- Kích thước hàng tối đa trong SQL Server 2005 đến giới hạn
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.