KB4054398-修正:「無法在 SQL Server 2014、2016和2017中產生「不正確比較」零售 assert

徵狀

假設您有一個查詢,可在 Microsoft SQL Server 2014、2016和2017的 CHAR 或 VARCHAR 欄上執行某些字串運算(例如,串連)。 請試想下列案例:

  • 您會以不同的排序規則來串連資料行。

  • 這些排序規則與其他排序規則不相容。 例如,您嘗試將分頁的欄串聯成 Latin1_General_CI_AI 與 Latin1_General_BIN。

  • 串連的最終結果會指派給特定的歸類(包括「database_default」),做為歸類衝突解決的問題。

在這種情況下,SQL Server 可能會傳回零售 assert,指出「由於沒有排序規則而造成的比較不正確」,而且您可能會收到如下所示的錯誤訊息:

位置: typinfo:LineNumber 運算式: false SPID: SPID 進程識別碼: ProcessID 描述:由於沒有排序規則,所以比較無效。

Msg 3624、Level 20、State 1、Line LineNumber 系統斷言檢查已失敗。 如需詳細資訊,請參閱 SQL Server 錯誤記錄。 通常,宣告失敗是由軟體錯誤或資料損毀所導致。 若要檢查資料庫是否損毀,請考慮執行 DBCC CHECKDB。 如果您同意在安裝期間將轉儲傳送至 Microsoft,則會將迷你轉儲傳送至 Microsoft。 在最新的 Service Pack 中,或從技術支援取得的修補程式中,可能會有 Microsoft 的更新。

Msg 596、Level 21、State 1、Line LineNumber 無法繼續執行,因為會話處於 [kill] 狀態。

Msg 0、Level 20、State 0、Line 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 支援專員連絡以深入了解您的意見。

×