KB4502400 - CORREÇÃO: SQL Server 2014, 2016 e 2017 não executam as atribuições de pré-linha solicitadas quando você usa a instrução MERGE que executa atribuições de variáveis locais para cada linha

Aplica-se a
SQL Server 2016 Service Pack 2 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Sintomas

Suponha que você use a instrução MERGE para descobrir quantas linhas não são correspondidas por origem e armazene-a em uma variável local da seguinte maneira:

DECLARE
  @NotMatchedBySource INT = 0;

MERGE TargetTable USING SourceTable ON TargetTable.id = SourceTable.id
QUANDO NÃO CORRESPONDIDA POR ORIGEM, THEN
  CONJUNTO DE @NotMatchedBySource = @NotMatchedBySource ATUALIZAÇÃO + 1;

IMPRIMIR @NotMatchedBySource;
VAI

Nessa situação, você pode observar que o valor de @NotMatchedBySource após a instrução MERGE pode não refletir o número real de linhas que não são correspondidas pela origem.

Status

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Resolução

Esse problema é corrigido nas seguintes atualizações cumulativas para o SQL Server

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:

Referências

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