KB4502400 – ÅTGÄRDAT: SQL Server 2014, 2016 och 2017 utför inte de begärda tilldelningarna före raden när du använder MERGE-instruktionen som utför tilldelningar av lokala variabler för varje rad

Gäller 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)

Symptom

Anta att du använder MERGE-instruktionen för att ta reda på hur många rader som inte matchas av källa och lagra den i en lokal variabel enligt följande:

DECLARE
  @NotMatchedBySource heltal = 0;

MERGE TargetTable USING SourceTable ON TargetTable.id = SourceTable.id
OM DET INTE MATCHAS AV KÄLLAN
  UPPDATERINGSUPPSÄTTNING @NotMatchedBySource = @NotMatchedBySource + 1;

SKRIVA UT @NotMatchedBySource;
GÅ TILL

I det här fallet kanske du märker att värdet för @NotMatchedBySource efter MERGE-instruktionen kanske inte återspeglar det faktiska antalet rader som inte matchas av källan.

Status

Microsoft har bekräftat att detta är ett problem i de Microsoft-produkter som anges i avsnittet "Gäller".

Lösning

Det här problemet åtgärdas i följande kumulativa uppdateringar för SQL Server

Om kumulativa uppdateringar för SQL Server:

Varje ny kumulativ uppdatering för SQL Server innehåller alla snabbkorrigeringar och alla säkerhetskorrigeringar som ingick i den tidigare kumulativa uppdateringen. Kolla in de senaste kumulativa uppdateringarna för SQL Server:

Referenser

Läs om den terminologi som Microsoft använder för att beskriva programuppdateringar.