2008-11-04 23 views

Trả lời

13

Bạn sẽ nhận được lỗi tràn khi giá trị tối đa đạt được là. Nếu bạn sử dụng kiểu dữ liệu bigint với giá trị tối đa là 9,223,372,036,854,775,807, điều này rất có thể sẽ không bao giờ xảy ra.

Các thông báo lỗi bạn sẽ nhận được, sẽ giống như thế này:

Msg 220, Level 16, State 2, Line 10 
Arithmetic overflow error for data type tinyint, value = 256. 

(Source)

Theo như tôi biết MS SQL không cung cấp chức năng để lấp đầy những khoảng trống sắc, vì vậy bạn hoặc sẽ phải làm điều này một mình hoặc thay đổi kiểu dữ liệu của cột nhận dạng.

Ngoài ra, bạn có thể đặt giá trị bắt đầu thành số âm nhỏ nhất, để có phạm vi giá trị lớn hơn thậm chí để sử dụng.

Here is a good blog post about this topic.

1

Nó sẽ không điền vào các khoảng trống. Thay vào đó chèn sẽ thất bại cho đến khi bạn thay đổi định nghĩa của cột để giảm danh tính và tìm cách điền vào các khoảng trống hoặc tăng kích thước (chuyển từ int thành bigint) hoặc thay đổi loại dữ liệu (từ int sang thập phân)) để có thêm giá trị nhận dạng.

0

Nếu cột nhận dạng là Số nguyên thì giá trị CPC tối đa của bạn là 2,147,483,647. Bạn sẽ nhận được một lỗi tràn nếu bạn vượt quá nó.

Nếu bạn cho rằng đây là một rủi ro, chỉ cần sử dụng loại dữ liệu BIGINT, cung cấp cho bạn lên đến 9.223.372.036.854.775.807. Không thể tưởng tượng một bảng cơ sở dữ liệu với nhiều hàng.

Thảo luận thêm here. (Cùng một liên kết như xsl được đề cập).

1

Bạn sẽ không thể chèn hàng mới và sẽ nhận được thông báo lỗi được liệt kê ở trên cho đến khi bạn khắc phục sự cố. Bạn có thể làm điều này bằng nhiều cách. Nếu bạn vẫn có dữ liệu và đang sử dụng tất cả các id dưới mức tối đa, bạn sẽ phải thay đổi kiểu dữ liệu. Nếu dữ liệu bị xóa một cách thường xuyên và bạn có một khoảng trống lớn không được sử dụng, bạn có thể thay đổi số nhận dạng thành số thấp nhất trong khoảng trống đó. Ví dụ, tại một công việc trước đó, chúng tôi đã đăng nhập các giao dịch. Chúng tôi có thể có 40-50 triệu mỗi tháng, nhưng chúng tôi đã thanh toán mọi thứ trên 6 tháng, vì vậy cứ vài năm một lần, danh tính sẽ đạt gần 2 tỷ, nhưng chúng tôi sẽ không có gì với id dưới 1,5 tỷ, vì vậy chúng tôi sẽ gieo hạt trở lại 0. Một lần nữa nó có thể là không ai trong số này sẽ làm việc cho bạn và bạn sẽ phải tìm một giải pháp khác nhau.

0

Trong trường hợp bạn nhấn số tối đa cho cột nhận dạng, bạn có thể di chuyển dữ liệu từ bảng đó sang bảng phụ có loại cột nhận dạng lớn hơn và chỉ định giá trị bắt đầu cho giá trị nhận dạng mới đó tối đa của loại trước đó. Các giá trị nhận dạng mới sẽ tiếp tục từ thời điểm đó.

0

Nếu bạn xóa "giá trị cũ" theo thời gian, bạn chỉ cần đặt lại hạt giống bằng cách sử dụng DBCC CHECKIDENT ('MyTable', RESEED, 0);

+0

DBCC CHECKIDENT ('MyTable', RESEED, -2147483647) có thể giúp bạn nếu bạn đã điền hàng 0-2147483647;) – keithl8041

Các vấn đề liên quan