KB4502400 - CORREÇÃO: SQL Server 2014, 2016 e 2017 não efetuam as atribuições de pré-linha pedidas quando utiliza 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 utiliza a instrução MERGE para descobrir quantas linhas não correspondem à origem e armazená-la numa variável local da seguinte forma:

DECLARE
  @NotMatchedBySource INT = 0;

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

IMPRIMIR @NotMatchedBySource;
GO

Nesta situação, poderá reparar que o valor de @NotMatchedBySource após a instrução MERGE pode não refletir o número real de linhas que não correspondem à origem.

Estado

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

Resolução

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

Acerca das atualizações cumulativas para SQL Server:

Cada nova atualização cumulativa para SQL Server contém todas as correções e todas as correções de segurança incluídas na atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:

Referências

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