KB4502400 – KORJAUS: SQL Server 2014, 2016 ja 2017 eivät suorita pyydettyjä riviä edeltäviä määrityksiä, kun käytät MERGE-lauseketta, joka suorittaa paikallisten muuttujien määritykset kullekin riville

Käytetään kohteeseen
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)

Ongelman ilmenemistapa

Oletetaan, että käytät MERGE-lausetta sen selvittämiseen, kuinka monta riviä lähde ei vastaa, ja tallennat sen paikalliseen muuttujaan seuraavasti:

ILMOITA
  @NotMatchedBySource INT = 0;

MERGE TargetTable USING SourceTable ON TargetTable.id = SourceTable.id
KUN LÄHDE EI TÄSMÄÄ, NIIN
  UPDATE SET @NotMatchedBySource = @NotMatchedBySource + 1;

TULOSTA @NotMatchedBySource;
SIIRRY

Tässä tilanteessa saatat huomata, että MERGE-lausekkeen jälkeinen @NotMatchedBySource arvo ei ehkä vastaa niiden rivien todellista määrää, joita lähde ei vastaa.

Tila

Microsoft on vahvistanut tämän olevan ongelma niissä Microsoftin tuotteissa, jotka ovat listattuna Koskee seuraavia tuotteita -osiossa.

Ratkaisu

Tämä ongelma on korjattu seuraavissa SQL Server kumulatiivisissa päivityksissä

Tietoja SQL Server:n kumulatiivisista päivityksistä:

Jokainen uusi SQL Server -kumulatiivinen päivitys sisältää kaikki edelliseen kumulatiiviseen päivitykseen sisältyvät hotfix-korjaukset ja tietoturvakorjaukset. Tutustu SQL Serverin uusimpiin kumulatiivisiin päivityksiin:

Viitteet

Lue tietoja Microsoftin ohjelmistopäivitystensä kuvaamiseen käyttämästä sanastosta.