KB4502400 — POPRAWKA: SQL Server 2014, 2016 i 2017 nie wykonują żądanych przypisań przed wierszami, gdy używasz instrukcji MERGE, która wykonuje przypisania zmiennych lokalnych dla każdego wiersza

Dotyczy
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)

Objawy

Załóżmy, że używasz instrukcji MERGE, aby dowiedzieć się, ile wierszy nie jest dopasowanych przez źródło i zapisać ją w zmiennej lokalnej w następujący sposób:

DECLARE
  @NotMatchedBySource INT = 0;

MERGE TargetTable USING SourceTable ON TargetTable.id = SourceTable.id
JEŚLI NIE JEST DOPASOWANY PRZEZ ŹRÓDŁO, TO
  ZESTAW AKTUALIZACJI @NotMatchedBySource = @NotMatchedBySource + 1;

WYDRUK @NotMatchedBySource;
IŚĆ

W takiej sytuacji można zauważyć, że wartość @NotMatchedBySource po instrukcji MERGE może nie odzwierciedlać rzeczywistej liczby wierszy, które nie są zgodne ze źródłem.

Stan

Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.

Rozwiązanie

Ten problem został rozwiązany w następujących aktualizacjach zbiorczych dla programu SQL Server

Informacje o aktualizacjach zbiorczych programu SQL Server:

Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:

Źródła informacji

Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.