อาการ
สมมติว่าคุณกําลังใช้ Microsoft SQL Server 2016 หรือ 2017 เมื่อคุณประมวลผลทรานสชันข้อมูลที่ปรับให้เหมาะสมกับหน่วยความจําโดยใช้ตัวแปรตารางที่ปรับให้เหมาะสมกับหน่วยความจํากับคําสั่งที่มีอยู่ คุณอาจได้รับผลลัพธ์ที่ไม่ถูกต้อง
ตัวอย่างเช่น:
ขั้นตอนที่ 1: สร้างฐานข้อมูลและตารางที่ปรับให้เหมาะสมกับหน่วยความจํา
การสาธิตสร้างฐานข้อมูล
การสาธิต ALTER DATABASE ADD FILEGROUP demo_mod มี MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') to FILEGROUP demo_mod
ใช้การสาธิต
ไป
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE AS TABLE
( source_col INT NULL,
target_col INT ไม่เป็น NULL
INDEX ix_InMemoryTable NONCLUSTERED (target_col)
) WITH (MEMORY_OPTIMIZED = ON)
ไป
ขั้นตอนที่ 2: แทรกข้อมูลและอัปเดตข้อมูล
DECLARE @t dbo IN_MEMORY_TABLE_TYPE
INSERT @t ( ค่า source_col target_col ) (10, 0),(0, 0)
เลือก * จาก@t
UPDATE r1 SET target_col = -1 FROM @t r1
ตําแหน่งที่มีอยู่ ( เลือก * จาก @t r2 ที่ r2.source_col > 0 )
SELECT * FROM @t
ไป
ขั้นตอนที่ 3: ตรวจสอบผลลัพธ์
ผลลัพธ์จริง: แถวของตัวแปรตารางไม่ทั้งหมด @t ได้รับการอัปเดต
source_col | target_col
----------------------
10 | -1
0 | 0
ผลลัพธ์ที่คาดไว้: แถวทั้งหมดควรได้รับการอัปเดตเพื่อให้ target_col = -1
source_col | target_col
----------------------
10 | -1
0 | -1.
การแก้ไข
ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตสะสมสําหรับ SQL Server ต่อไปนี้:
แต่ละปรับปรุงสะสมใหม่สําหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการปรับปรุงสะสมก่อนหน้านี้ ดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"
อ้างอิง
เรียนรู้เกี่ยวกับคําศัพท์ที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์