Triệu chứng
Giả định rằng bạn đang sử dụng Microsoft SQL Server 2016 hoặc 2017. Khi bạn xử lý các giao dịch dữ liệu được tối ưu hóa bằng cách sử dụng các biến bảng tối ưu hóa bộ nhớ với câu lệnh tồn tại , bạn có thể nhận được kết quả sai.
Ví dụ:
Step1: tạo một cơ sở dữ liệu và bảng tối ưu hóa bộ nhớ.
Tạo bản demo cơ sở dữ liệu
THAY đổi cơ sở dữ liệu demo thêm FILEGROUP demo_mod chứa MEMORY_OPTIMIZED_DATA
THAY đổi cơ sở dữ liệu demo thêm TỆP (tên = ' demo_mod1 ', filename = ' C:\DATA\ demo_mod1 ') vào FILEGROUP demo_mod
Sử dụng Demo
Phải
TẠO kiểu dbo. IN_MEMORY_TABLE_TYPE DƯỚI DẠNG BẢNG
(source_col INT NULL,
target_col INT không phải là NULL
CHỈ mục ix_InMemoryTable không liên cụm (target_col)
) VỚI (MEMORY_OPTIMIZED = BẬT)
PHẢI
Step2: chèn dữ liệu và cập nhật dữ liệu.
KHAI báo @t dbo. IN_MEMORY_TABLE_TYPE
CHÈN @t (source_col, target_col) các giá trị (10, 0), (0, 0)
chọn * từ @t
Cập Nhật bộ R1 target_col =-1 từ @t R1
Khi tồn tại (chọn * từ @t R2 r2.source_col > 0)
CHỌN * từ @t
PHẢI
Step3: kiểm tra kết quả.
Kết quả thực sự: không phải tất cả các hàng của biến số của bảng @t được Cập Nhật.
source_col | target_col
----------------------
10 | 26-1
0 | 4-0
Kết quả dự kiến: tất cả các hàng sẽ được Cập Nhật để target_col =-1.
source_col | target_col
----------------------
10 | 26-1
0 | 26-1.
Giải pháp
Sự cố này đã được khắc phục trong các bản Cập Nhật tích lũy sau đây cho SQL Server:
Mỗi bản Cập Nhật tích lũy mới cho SQL Server chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản Cập Nhật tích lũy trước đó. Kiểm tra các bản Cập Nhật tích lũy mới nhất cho SQL Server:
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".
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.