الأعراض
افترض أنك تستخدم Microsoft SQL Server 2016 أو 2017. عند معالجة معاملات البيانات المحسنة للذاكرة باستخدام متغيرات الجدول المحسنة للذاكرة مع عبارة where exists ، قد تحصل على نتيجة خاطئة.
على سبيل المثال:
الخطوة 1: إنشاء قاعدة بيانات وجدول محسن للذاكرة.
إنشاء عرض توضيحي لقاعدة البيانات
عرض توضيحي ل ALTER DATABASE ADD FILEGROUP demo_mod يحتوي على MEMORY_OPTIMIZED_DATA
العرض التوضيحي ALTER DATABASE 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
فهرس ix_InMemoryTable غير متفاوت المسافات (target_col)
) مع (MEMORY_OPTIMIZED = ON)
الذهاب
الخطوة 2: إدراج البيانات وتحديث البيانات.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) VALUES (10, 0),(0, 0)
حدد * من @t
UPDATE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE 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 لوصف تحديثات البرامج.