2008-10-27 38 views
6

Tôi đã có một vấn đề khác thường ngày hôm qua, nơi tôi đột nhiên không thể chèn bản ghi vào một bảng với một cột nhận dạng.Điều gì có thể khiến cột IDENTITY bị hỏng?

Một chèn đơn giản như thế này: INSERT INTO MyTable GIÁ TRỊ (COLUMN1, column2) ('text', 236.764)

Bắt đầu ném một sự vi phạm ràng buộc khoá chính.

Tôi chạy DBCC CHECKIDENT trên bảng và nhận ra rằng SQL Server đã ngừng cập nhật giá trị được sử dụng cuối cùng, để khi nó được chèn, nó tăng dần bằng giá trị cũ và giá trị nhận dạng mới thường tồn tại trong bảng, do đó các lỗi vi phạm.

Giải quyết vấn đề không phải là vấn đề, tôi vừa mới nhập lại bảng cho số thứ tự cao nhất tiếp theo, nhưng tôi chưa bao giờ thấy điều này xảy ra trước đây!

Có ai có bất kỳ ý tưởng nào có thể khiến SQL Server ngừng cập nhật thuộc tính nhận dạng và nơi tôi có thể tìm bằng chứng không? Không có sự sao chép hoặc bất kỳ trình kích hoạt nào liên quan, nó chỉ là một bảng cũ đơn giản.

EDIT: SQL Log Rescue sẽ là lý tưởng, nhưng nó chỉ hoạt động trên SQL Server 2000. Có một công cụ tương tự trên đó cho các bản ghi SQL 2005 không?

Trả lời

1

Nếu ai đó đã chèn vào bảng bằng cách sử dụng SET IDENTITY_INSERT ON, ai đó hoàn toàn có thể đã nhập vào một giá trị không hợp lệ cho bảng. Đó sẽ là phỏng đoán đầu tiên của tôi. Bạn có thể sử dụng trình phân tích nhật ký như SQL Log Rescue để quay ngược thời gian thông qua nhật ký giao dịch và xem liệu bạn có thể tìm thấy ai là người xấu đã làm hỏng dữ liệu của bạn không ...

+0

Xem câu trả lời khác, identity_insert dường như không làm điều đó. – user12861

1

Tôi nghĩ SET IDENTITY_INSERT ON đã đặt lại danh tính.

Từ BOL

Nếu giá trị chèn lớn hơn giá trị bản sắc hiện tại cho bảng , SQL Server tự động sử dụng giá trị chèn mới như giá trị sắc hiện tại.

Cách duy nhất tôi có thể tạo lại vấn đề này là đặt thủ công hạt giống quá thấp với DBCC CHECKIDENT.

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