תופעות
נניח שאתה משתמש ב- Microsoft SQL Server 2016 או 2017. בעת עיבוד טרנזקציות נתונים ממוטבות לזיכרון באמצעות משתני טבלה ממוטבים לזיכרון עם המשפט שבו קיים, ייתכן שתקבל תוצאה שגויה.
לדוגמה:
שלב1: יצירת מסד נתונים וטבלה ממוטבים לזיכרון.
צור הדגמה של מסד נתונים
ALTER DATABASE demo 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 בתור טבלה
( source_col INT NULL,
target_col INT NOT NULL
אינדקס ix_InMemoryTable ללא הכללה (target_col)
) WITH (MEMORY_OPTIMIZED = ON)
ללכת
שלב2: הוספת נתונים ועדכון נתונים.
תצהיר @t דבו. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) VALUES (10, 0),(0, 0)
select * from @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 |10 -1
0 |0 0
התוצאות הצפויות: כל השורות אמורות להתעדכן כך target_col = -1.
source_col | target_col
----------------------
10 |10 -1
0 |0 -1.
פתרון
בעיה זו נפתרה בעדכונים המצטברים הבאים עבור SQL Server:
כל עדכון מצטבר חדש עבור SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:
מצב
Microsoft אישרה כי זוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".
הפניות
למד על המינוח שבו Microsoftמשתמשת כדי לתאר עדכוני תוכנה.