現象
Microsoft SQL Server 2014、2016、2017で、文字列操作 (連結、CHAR または VARCHAR 列など) を実行するクエリがあるとします。 次のような状況で問題が発生します。
-
列に割り当てられているさまざまな照合順序を使用して列を連結します。
-
これらの照合は、互いに互換性がありません。 たとえば、Latin1_General_CI_AI として対応する列を Latin1_General_BIN で連結しようとします。
-
連結の最終的な結果は、照合の競合解決の問題として、特定の照合順序 ("database_default" を含む) に割り当てられます。
このシナリオでは、SQL Server が "照合順序なしによる無効な比較" という状態のリテールアサートを返すことがあります。次のようなエラーメッセージが表示されることがあります。
Location: typinfo. .cpp:LineNumber 式: false SPID: SPID プロセス ID: 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 セッションが強制終了状態にあるため、実行を続行できません。
Msg 0、Level 20、State 0、Line LineNumber
現在のコマンドで重大なエラーが発生しました。 結果は破棄する必要があります。
原因
クエリの最適化ステージでは、SQL Server はクエリのさまざまな段階 (連結など) の中間結果を cardinalities 計算します。 照合順序の競合解決は最後に行われるため、クエリオプティマイザーはそれを認識していないため、重複した照合順序での入力で連結基数の計算を実行しようとします。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで修正されています。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
SQL Server 2016 の最新の累積的な更新プログラム
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語について説明します。