KB4054398-修复:在 SQL Server 2014、2016和2017中出现 "没有排序规则时的比较无效" 零售断言

症状

假设你有一个查询,该查询对 Microsoft SQL Server 2014、2016和2017中的 CHAR 或 VARCHAR 列执行某些字符串运算(例如,串联)。 请考虑以下情况:

  • 将具有分配给它们的不同排序规则的列串联在一起。

  • 这些排序规则与另一个不兼容。 例如,尝试将按 Latin1_General_CI_AI 进行排序的列与 Latin1_General_BIN 相连接。

  • 由于归类冲突解决,串联的最终结果将分配给特定归类(包括 "database_default")。

在此方案中,SQL Server 可能返回一个零售断言,显示 "由于无排序规则进行比较",并且你可能会收到类似于以下内容的一些错误消息:

位置: typinfo:LineNumber 表达式: false SPID: SPID 进程 ID: ProcessID 说明:由于没有排序规则,比较无效。

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

消息596,级别21,状态1,行 LineNumber 无法继续执行,因为会话处于 kill 状态。

消息0,级别20,状态0,行 LineNumber

当前命令出现严重错误。  应丢弃结果(如果有)。

原因

在查询优化阶段,SQL Server 会尝试在查询的各个阶段(例如,串联)的中间结果上计算 cardinalities。 由于排序规则冲突解决方案在最末尾进行,因此查询优化程序可能不会对其进行识别,并且尝试在具有冲突排序规则的输入上执行连接基数的计算。

解决方案

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

       SQL Server 2016 SP1 的累积更新8  

       SQL Server 2017 的累积更新4

       SQL Server 2014 SP2 的累积更新9

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

SQL Server 2016 的最新累计更新

SQL Server 2017 的最新累计更新

SQL Server 2014 的最新累积更新

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

参考

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

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×