KB4502400 - 修正: SQL Server 2014、2016、2017 では、各行のローカル変数の割り当てを実行する MERGE ステートメントを使用する場合、要求された行前の割り当てが実行されません

適用先
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)

現象

MERGE ステートメントを使用して、ソースによって一致しない行の数を確認し、次のようにローカル変数に格納することを想定しています。

DECLARE
  @NotMatchedBySource INT = 0;

MERGE TargetTable USING SourceTable ON TargetTable.id = SourceTable.id
ソースによって一致しない場合は、
  UPDATE SET @NotMatchedBySource = @NotMatchedBySource + 1;

PRINT @NotMatchedBySource。
行く

このような状況では、MERGE ステートメントの後の @NotMatchedBySource の値に、ソースによって一致しない行の実際の数が反映されない場合があります。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

解決策

この問題は、次の累積的な更新プログラムで修正SQL Server

SQL Serverの累積的な更新プログラムについて:

SQL Serverの各新しい累積的な更新プログラムには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれていたすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。