症狀
假設您有一個查詢會在 Microsoft SQL Server 2014、2016 和 2017 中執行一些字串運算,例如串連運算的 CHAR 或 VARCHAR 資料行。 請考慮以下案例:
- 您可以將欄與指派給它們的不同定序串連。
- 這些定序彼此不相容。 例如,您嘗試將與 Latin1_General_BIN 按Latin1_General_CI_AI分頁的欄串連。
- 串連的最終結果被分配給特定的排序規則 (包括“database_default”) 作為排序規則衝突解決的問題。
在此案例中,SQL Server 可能會傳回零售判斷提示,指出「因無定序而導致比較無效」,而且您可能會收到一些類似下列的錯誤訊息:
注意
位置:typinfo.cpp:LineNumber
運算式:false
SPID: SPID
處理序識別碼: ProcessID
描述:由於沒有定序,因此比較無效。Msg 3624,層級 20,狀態 1,行 列編號
系統判斷提示檢查失敗。 如需詳細資料,請檢查 SQL Server 錯誤記錄檔。 一般而言,判斷提示失敗是由軟體錯誤或資料損毀所造成。 若要檢查資料庫損毀,請考慮執行 DBCC CHECKDB。 如果您同意在安裝期間傳送傾印給 Microsoft,將會將迷你傾印傳送給 Microsoft。 更新可能會從 Microsoft 的最新 Service Pack 或技術支援的 Hotfix 中取得。Msg 596, Level 21, State 1, Line LineNumber
無法繼續執行,因為工作階段處於終止狀態。Msg 0, Level 20, State 0, Line Number, Msg 0, Level 20, State 0, Line Number
目前命令發生嚴重錯誤。 如果有結果,應丟棄。
原因
在查詢最佳化階段,SQL Server 會嘗試計算查詢各個階段的中繼結果的基數,例如串連。 由於定序衝突解決發生在最後,因此查詢最佳化工具可能不知道這一點,並嘗試在具有衝突定序的輸入上執行串連基數的計算。
解決方式
此問題已在下列 SQL Server 累積更新中修正:
關於 SQL Server 的累積更新:
SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。
參考資料
了解 Microsoft 用來說明軟體更新的術語。