KB4502400 - CORRECTIF : SQL Server 2014, 2016 et 2017 n’effectuent pas les affectations de pré-ligne demandées lorsque vous utilisez l’instruction MERGE qui effectue des affectations de variables locales pour chaque ligne

S’applique à
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)

Symptômes

Supposons que vous utilisez l’instruction MERGE pour déterminer le nombre de lignes qui ne correspondent pas à la source et que vous la stockez dans une variable locale comme suit :

DECLARE
  @NotMatchedBySource INT = 0 ;

MERGE TargetTable USING SourceTable ON TargetTable.id = SourceTable.id
LORSQU’IL N’EST PAS MIS EN CORRESPONDANCE PAR LA SOURCE, ALORS
  UPDATE SET @NotMatchedBySource = @NotMatchedBySource + 1 ;

IMPRIMER @NotMatchedBySource;
ALLER

Dans ce cas, vous pouvez remarquer que la valeur de @NotMatchedBySource après l’instruction MERGE peut ne pas refléter le nombre réel de lignes qui ne sont pas mises en correspondance par source.

État

Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».

Résolution

Ce problème est résolu dans les mises à jour cumulatives suivantes pour SQL Server

À propos des mises à jour cumulatives pour SQL Server :

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :

Références

En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.