Triệu chứng
Giả sử bạn đang sử dụng Microsoft SQL Server 2016 hoặc 2017. Khi bạn xử lý bộ nhớ tối ưu hóa dữ liệu giao dịch bằng cách sử dụng bộ nhớ tối ưu hóa bảng biến với các mà tồn tại tuyên bố, bạn có thể nhận được một kết quả sai.
Ví dụ:
Bước 1: Tạo cơ sở dữ liệu và bảng được tối ưu hóa bộ nhớ.
Bản demo Tạo CƠ SỞ DỮ LIỆU
ALTER DATABASE demo ADD FILEGROUP demo_mod CONTAINS MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') TO FILEGROUP demo_mod
Sử dụng Bản demo
Đi
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE DƯỚI DẠNG BẢNG
( source_col INT NULL,
target_col INT not NULL
HÀM INDEX ix_InMemoryTable NONCLUSTERED (target_col)
) WITH (MEMORY_OPTIMIZED = ON)
ĐI
Bước 2: Chèn dữ liệu và cập nhật dữ liệu.
KHAI BÁO @t dbo. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) VALUES (10, 0),(0, 0)
chọn * từ @t
UPDATE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
CHỌN * TỪ @t
ĐI
Bước 3: Kiểm tra kết quả.
Kết quả Thực tế: Không phải tất cả các hàng của biến @t bảng đều được cập nhật.
source_col | target_col
----------------------
10 | -1
0 | 0
Kết quả mong đợi: Tất cả các hàng sẽ được cập nhật để có target_col = -1.
source_col | target_col
----------------------
10 | -1
0 | -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 SQL Server:
Mỗi bản cập nhật tích lũy mới dành cho SQL Server sẽ chứa tất cả các bản cập nhật nóng và tất cả các bản sửa lỗi bảo mật được bao gồm trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất dành cho doanh 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.