KB4465745 - 修复:在 SQL Server 2016 和 2017 中运行带有 OUTPUT 子句的 MERGE 语句时,会发生断言错误

应用对象
SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows SQL Server 2016 Service Pack 1 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)

症状

请考虑以下情形:

  • 在 Windows 上的 SQL Server 2016 或 2017 中的存储过程或临时 Transact-SQL 批处理中运行包含 OUTPUT 子句的 MERGE 语句。
  • 目标数据库使用 BULK_LOGGED 或简单恢复模式。
  • 插入大量数据 (例如:大约 6,000 行) 到另一个数据库的表中。

在这种情况下,会发生断言错误,你可能会收到类似以下内容的错误消息:

注意

  • 消息 3624,级别 20,状态 1,行 LineNumber
  • 系统断言检查失败。 查看 SQL Server 错误日志了解详细信息。 断言失败通常是由软件 bug 或数据损坏导致的。 若要检查数据库损坏,请考虑运行 DBCC CHECKDB。 如果你同意在安装过程中向 Microsoft 发送转储,则将向 Microsoft 发送一个小型转储。 更新可能来自 Microsoft 的最新服务包或技术支持的修补程序中提供。

解决方法

累积更新信息:

此问题已在 SQL Server 的以下累积更新中修复:

SQL Server 2017 累积更新 12

SQL Server 2016 SP2 累积更新 4

SQL Server 2016 Service Pack 1 累积更新 13

SQL Server 2016 SP1 累积更新 12

关于 SQL Server 的累积更新

SQL Server 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

SQL Server 2017 的最新累计更新

SQL Server 2016 的最新累计更新

按需修补程序信息:

此问题已在以下 SQL Server 按需修补程序中修复:

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

参考资料

了解 Microsoft 用于描述软件更新的术语。