KB4502400 – FIX: SQL Server 2014, 2016 und 2017 führen nicht die angeforderten Zuweisungen vor der Zeile aus, wenn Sie die MERGE-Anweisung verwenden, die Zuweisungen lokaler Variablen für jede Zeile ausführt

Gilt für
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)

Symptome

Angenommen, Sie verwenden die MERGE-Anweisung, um herauszufinden, wie viele Zeilen nicht mit der Quelle übereinstimmen, und speichern sie wie folgt in einer lokalen Variablen:

DECLARE
  @NotMatchedBySource INT = 0;

MERGE TargetTable USING SourceTable ON TargetTable.id = SourceTable.id
WENN NICHT VON DER QUELLE ABGEGLICHEN, DANN
  UPDATESATZ @NotMatchedBySource = @NotMatchedBySource + 1;

DRUCKEN @NotMatchedBySource;
GEHE

In dieser Situation stellen Sie möglicherweise fest, dass der Wert von @NotMatchedBySource nach der MERGE-Anweisung möglicherweise nicht die tatsächliche Anzahl der Zeilen widerspiegelt, die nicht von der Quelle abgeglichen werden.

Status

Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.

Lösung

Dieses Problem wurde in den folgenden kumulativen Updates für SQL Server behoben

Informationen zu kumulativen Updates für SQL Server:

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:

Referenzmaterial

Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.