KB4502400 – KORREKTUR: SQL Server 2014, 2016 und 2017 führen nicht die angeforderten Vorzeilenzuweisungen 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 von der Quelle abgeglichen werden, und speichern Sie 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 WIRD, DANN
  UPDATE SET @NotMatchedBySource = @NotMatchedBySource + 1;

DRUCKEN @NotMatchedBySource;
GEHEN

In diesem Fall stellen Sie möglicherweise fest, dass der Wert von @NotMatchedBySource nach der MERGE-Anweisung möglicherweise nicht die tatsächliche Anzahl von 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 alle 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.