Симптоми
Да предположим, че използвате Microsoft SQL Server 2016 или 2017. Когато обработвате транзакции на данни, оптимизирани за паметта, с помощта на оптимизирани за паметта таблично променливи с командата къде съществува , може да получите грешен резултат.
Например:
Стъпка 1: Създайте оптимизирана за паметта база данни и таблица.
Създаване на демонстрация на БАЗА ДАННИ
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
Използване на демонстрация
Отидете
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
КЪДЕ СЪЩЕСТВУВА ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
SELECT * FROM @t
ОТИДЕТЕ
Стъпка 3: Проверете резултатите.
Действителни резултати: Не всички редове с променлива на таблицата @t се актуализират.
source_col | target_col
----------------------
10 000 000 00 -1
5.99 лв. 0
Очакваните резултати: Всички редове трябва да се актуализират, за да имат target_col = -1.
source_col | target_col
----------------------
10 000 000 00 -1
5.99 лв. -1.
Решение
Този проблем е коригиран в следните кумулативни актуализации за SQL Server:
Всяка нова кумулативна актуализация за SQL Server съдържа всички горещи поправки и всички корекции на защитата, които са били включени в предишната кумулативна актуализация. Прегледайте най-новите кумулативни актуализации за SQL Server:
Статут
Microsoft потвърди, че това е проблем в продуктите на Microsoft, които са изброени в раздела "Отнася се за".
Препратки
Научете повече за терминологията, която Microsoft използва за описване на актуализациите на софтуера.