Sintomas
Suponha que você esteja usando o Microsoft SQL Server 2016 ou o 2017. Ao processar transações de dados otimizadas para memória usando variáveis de tabela otimizadas à memória com a instrução Where Exists , você pode receber um resultado errado.
Por exemplo:
Step1: Crie um banco de dados e tabela com otimização de memória.
Criar demonstração de banco de dados
Instrução ALTER DATABASE ADD FILE demo_mod contém MEMORY_OPTIMIZED_DATA
ALTERAR demonstração do banco de dados Adicionar arquivo (Name = ' demo_mod1 ', FileName = ' C:\DATA\ demo_mod1 ') ao grupo de arquivos demo_mod
Usar demonstração
Usado
Crie o tipo dbo. IN_MEMORY_TABLE_TYPE COMO TABELA
(source_col INT nulo,
target_col INT não nula
ÍNDICE ix_InMemoryTable não CLUSTERIZAdo (target_col)
) COM (MEMORY_OPTIMIZED = ON)
GO
Step2: inserir dados e atualizar dados.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERIR valores de @t (source_col, target_col) (10; 0), (0, 0)
select * from @t
Atualize o conjunto de R1 target_col =-1 de @t R1
ONDE existe (selecione * de @t R2 r2.source_col > 0)
SELECT * FROM @t
GO
Step3: verificar resultados.
Resultados reais: nem todas as linhas da variável de tabela @t são 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 | um.
Resolução
Esse problema foi corrigido nas seguintes atualizações cumulativas do 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 do SQL Server:
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Referências
Saiba mais sobre a terminologiaque a Microsoft usa para descrever atualizações de software.