KB4039776 - CORREÇÃO: Comportamento incorreto ao usar tabelas com otimização de memória com 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. Quando você processa transações de dados com otimização de memória usando variáveis de tabela otimizadas para memória com a instrução where exists , você pode obter um resultado errado.

Por exemplo:

Passo 1: Crie uma base de dados e uma tabela com memória otimizada.

Demonstração da criação de BASE DE DADOS

DEMONSTRAÇÃO DA BASE DE DADOS ALTER ADICIONAR GRUPO DE FICHEIROS demo_mod CONTÉM MEMORY_OPTIMIZED_DATA

Demonstração do ALTER DATABASE ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') AO FILEGROUP demo_mod

Utilizar a Demonstração

Ir

CRIE O TIPO DBO. IN_MEMORY_TABLE_TYPE COMO TABELA

( source_col INT NULL,

target_col INT not NULL

ÍNDICE ix_InMemoryTable NÃO AGRUPADO (target_col)

) COM (MEMORY_OPTIMIZED = ATIVADO)

GO

Passo 2: inserir e atualizar dados.

DECLARE @t dbo. IN_MEMORY_TABLE_TYPE

INSERIR @t ( source_col, target_col ) VALORES (10, 0),(0, 0)

*selecione * de @t*

UPDATE R1 SET target_col = -1 FROM @t R1

ONDE EXISTE ( SELECIONE * DE @t r2 ONDE r2.source_col > 0 )

*SELECIONE * FROM @t*

GO

Passo 3: Verifique os resultados.

Resultados Reais: Nem todas as linhas de variáveis de tabela @t ser atualizadas.

source_col | target_col


10 | -1

0 | 0

Os resultados esperados: Todas as linhas devem ser atualizadas para terem target_col = -1.

source_col | target_col


10 | -1

0 | -1.

Resolução

Este problema foi corrigido nas seguintes atualizações cumulativas para SQL Server:

Atualização cumulativa 1 para SQL Server 2017

Atualização cumulativa 5 para SQL Server 2016 SP1

Acerca das 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 que foram incluídas com a atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:

Atualização cumulativa mais recente para o SQL Server 2017

Atualizações cumulativas mais recentes do SQL Server 2016

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".

Referências

Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.