Triệu chứng

Khi bạn chạy một bản cập nhật trên bảng có chỉ mục liên cụm hoặc duy nhất và cập nhật xảy ra trên một cột duy nhất không phải là chính, bản ghi theo dõi thay đổi không nhất quán với câu lệnh cập nhật.

Ví dụ: giả sử một cột có tên là "cột1" được bao gồm trong chỉ mục liên cụm hoặc duy nhất. Khi giá trị cột được thay đổi từ giá trị lớn hơn thành giá trị nhỏ hơn (chẳng hạn như thay đổi giá trị từ 20 thành 16), bảng bên theo dõi thay đổi sẽ nhận được thao tác chèn trước thao tác xóa. Ví dụ: nhận được thao tác chèn bản ghi hàng nhật ký giao dịch trước khi thực hiện thao tác xóa hàng hoặc "I" được chèn trước "D".

Sys_change_version

sys_change_create_version

sys_change_operation

sys_change_column

sys_change_context

PK_column

1116

19

I

NULL

NULL

5639485628

1116

20

D

NULL

NULL

5639485628


Khi giá trị cột được thay đổi từ giá trị nhỏ hơn thành giá trị lớn hơn (chẳng hạn như thay đổi giá trị từ 16 thành 20), "D" sẽ được chèn trước "I".

Sys_change_version

sys_change_create_version

sys_change_operation

sys_change_column

sys_change_context

PK_column

1126

32

D

NULL

NULL

5639485628

1126

33

I

NULL

NULL

5639485628

Nguyên nhân

Sự cố này xảy ra do thứ tự không chính xác giữa các cặp xóa/chèn trong bảng bên theo dõi thay đổi.

Giải pháp

Bản sửa lỗi cho sự cố này được bao gồm trong các bản cập nhật sau đây dành cho SQL Server:

         Bản cập nhật tích lũy 8 cho SQL Server 2017

         Bản cập nhật Tích lũy 9 cho SQL Server 2016 Gói Dịch vụ 1

Bản cập nhật tích lũy 12 dành cho SQL Server 2014 SP2

Giới thiệu SQL Server dựng

Mỗi bản dựng mới dành SQL Server sẽ chứa tất cả các bản cập nhật nóng và bản sửa lỗi bảo mật trong bản dựng trước đó. Chúng tôi khuyên bạn nên cài đặt bản dựng mới nhất cho SQL Server:

Bản cập nhật tích lũy mới nhất cho SQL Server 2017

bản dựng mới nhất cho SQL Server 2016

Bản cập nhật tích lũy mới nhất cho SQL Server 2014

Trạng thái

Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".

Thông tin Bổ sung

Đối với bảng bật chức năng theo dõi thay đổi, khi cập nhật xảy ra trên một cột không phải chính được xác định là duy nhất, hai mục nhập sẽ được chèn vào bảng bên theo dõi thay đổi: Một mục nhập cho mỗi hành động tách, Chèn và Xóa.

Khi hàm CHANGETABLE được gọi là liệt kê các thay đổi, các mục nhập này được sắp xếp theo giá trị khóa chính, sau đó các thao tác sẽ được tổng hợp. Nếu bản cập nhật chèn giá trị thấp hơn, thao tác "I" sẽ chạy trên bảng bên trước, tiếp theo là thao tác "D". Điều này gây ra một thao tác không chính xác được trả về cho hàng này. Điều này là do "I" theo sau "D" được tổng hợp là "D."

Vì chỉ có các giá trị khóa chính được duy trì trong các bảng bên, nó không phải là cần thiết để có hai mục riêng biệt. Điều này đúng miễn là cột khóa chính không được cập nhật.

Sự cố này đã được khắc phục đối với các cột duy nhất không phải là cột duy nhất chính. Trong trường hợp này, khi quá trình cập nhật diễn ra, chỉ có một hàng được chèn bằng cách có "U" làm thao tác cập nhật thay vì hai mục nhập có "D" và "I".

Tham khảo

Tìm hiểu về thuật ngữ mà Microsoft sử dụng để mô tả các bản cập nhật phần mềm.

Bạn cần thêm trợ giúp?

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Microsoft dùng nội bộ

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?

Cảm ơn phản hồi của bạn!

×