Sintomas
Suponha que você esteja usando o Microsoft SQL Server 2016 ou 2017. Quando você processa 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 em que existe , você pode obter um resultado errado.
Por exemplo:
Etapa1: criar um banco de dados e uma tabela com otimização de memória.
Criar demonstração de BANCO DE DADOS
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
Usar Demonstração
Ir
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE TABELA AS
( source_col NULL INT,
target_col INT não NULL
INDEX ix_InMemoryTable NONCLUSTERED (target_col)
) WITH (MEMORY_OPTIMIZED = ON)
GO
Etapa2: inserir dados e atualizar dados.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
VALORES INSERT @t ( source_col, target_col ) (10, 0)(0, 0)
selecione * de @t
ATUALIZAÇÃO r1 SET target_col = -1 DE @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
SELECT * FROM @t
GO
Etapa3: 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 | -1.
Resolução
Esse problema é corrigido nas seguintes atualizações cumulativas para SQL Server:
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as últimas atualizações cumulativas para 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.