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 智力 = 0;

MERGE TargetTable 使用 SourceTable TargetTable.id = SourceTable.id
如果沒有被來源匹配,那麼
  更新集 @NotMatchedBySource = @NotMatchedBySource + 1;

印刷 @NotMatchedBySource;
走吧

在這種情況下,你可能會注意到 MERGE 語句後的 @NotMatchedBySource 值可能不反映來源未匹配的實際列數。

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

解決方式

此問題已在以下 SQL Server 的累積更新中修正

關於 SQL Server 的累積更新:

每次新的 SQL Server 累積更新都包含了之前累積更新中包含的所有熱修補與安全修補。 請查看 SQL Server 的最新累積更新:

參考資料

了解 Microsoft 用來說明軟體更新的術語