KB4039776 - CORREÇÃO: Comportamento incorreto ao usar tabelas com otimização de memória com a instrução "onde existe" no SQL Server 2016 ou 2017

Aplica-se a
SQL Server 2016 Service Pack 1 SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 on Windows (all editions)

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.