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;
ไป

ในสถานการณ์นี้ คุณอาจสังเกตเห็นว่าค่าของ @NotMatchedBySource หลังจากคําสั่ง MERGE อาจไม่แสดงจํานวนจริงของแถวที่ไม่ตรงกันตามแหล่งที่มา

สถานะ

Microsoft ได้ยืนยันว่านี่เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่แสดงไว้ในส่วน "นำไปใช้กับ"

การแก้ปัญหา

ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตสะสมต่อไปนี้สําหรับ SQL Server

เกี่ยวกับการอัปเดตสะสมสําหรับ SQL Server:

แต่ละปรับปรุงสะสมใหม่สําหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการปรับปรุงสะสมก่อนหน้านี้ ดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:

การอ้างอิง

เรียนรู้เกี่ยวกับคำศัพท์ที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์