Sintomas
Suponha que você esteja usando o Microsoft SQL Server 2016 ou 2017. Ao processar transações de dados com otimização de memória usando variáveis de tabela com otimização de memória com a instrução where exists , você pode obter um resultado errado.
Por exemplo:
Etapa 1: Criar um banco de dados e uma tabela com otimização de memória.
Criar demonstração do DATABASE
BANCO DE DADOS demonstração ADICIONAR GRUPO DE ARQUIVOS demo_mod CONTÉM MEMORY_OPTIMIZED_DATA
ADICIONAR BANCO DE DADOS demonstração ADICIONAR ARQUIVO (name='demo_mod1', filename='C:\DATA\demo_mod1') AO GRUPO DE ARQUIVOS demo_mod
Usar demonstração
Vá
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE COMO TABELA
( source_col INT NULL,
target_col INT not NULL
ÍNDICE ix_InMemoryTable NÃO CLUSTERIZADO (target_col)
) COM (MEMORY_OPTIMIZED = ATIVADO)
VAI
Passo 2: Insira dados e atualize os dados.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERIR @t ( source_col, target_col ) VALORES (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*
VAI
Etapa 3: verificar os resultados.
Resultados reais: nem todas as linhas da variável da tabela @t ser atualizadas.
source_col | target_col
10 | -1
0 | 0
Os resultados esperados: Todas as linhas devem ser atualizadas para ter target_col = -1.
source_col | target_col
10 | -1
0 | -1.
Resolução
Esse problema é corrigido nas seguintes atualizações cumulativas para o SQL Server:
Atualização cumulativa 1 para o SQL Server 2017
Atualização cumulativa 5 para o SQL Server 2016 SP1
Sobre atualizações cumulativas para o SQL Server:
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes para o SQL Server:
Atualização cumulativa mais recente do SQL Server 2017
Atualizações cumulativas mais recentes do SQL Server 2016
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Referências
Saiba mais sobre a terminologia que a Microsoft usa para descrever atualizações de software.