KB4054398 - 修正: 2014 年、2016 年、2017 年SQL Serverに"照合順序がないために比較が無効です" リテール アサートが発生する

適用先
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2017 Standard on Windows SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core 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)

現象

Microsoft SQL Server 2014、2016、2017 の CHAR 列または VARCHAR 列に対して、連結などの文字列操作を実行するクエリがあるとします。 たとえば次のようなシナリオを考えてみます。

  • 列に割り当てられている異なる照合順序を使用して列を連結します。
  • これらの照合順序は互いに互換性がありません。 たとえば、Latin1_General_BINとLatin1_General_CI_AIとして照合された列を連結しようとするとします。
  • 連結の最終的な結果は、照合順序の競合解決の問題として、特定の照合順序 ("database_default" を含む) に割り当てられます。

このシナリオでは、SQL Serverは"NO COLLATION による比較が無効です" というリテール アサートを返す場合があり、次のようなエラー メッセージが表示される場合があります。

  • 場所: typinfo.cpp:LineNumber
    式: false
    SPID: SPID
    プロセス ID: ProcessID
    説明: 照合順序がないため、比較が無効です。

  • Msg 3624、レベル 20、状態 1、Line LineNumber
    システム アサーション チェックが失敗しました。 詳細については、SQL Serverエラー ログを確認してください。 通常、アサーションエラーはソフトウェアのバグまたはデータの破損によって発生します。 データベースの破損をチェックするには、DBCC CHECKDB の実行を検討してください。 セットアップ中に Microsoft にダンプを送信することに同意した場合は、ミニ ダンプが Microsoft に送信されます。 更新プログラムは、最新の Service Pack またはテクニカル サポートの修正プログラムで Microsoft から入手できる場合があります。

  • メッセージ 596、レベル 21、状態 1、 Line LineNumber
    セッションが強制終了状態であるため、実行を続行できません。

  • メッセージ 0、レベル 20、状態 0、Line LineNumber

  • 現在のコマンドで重大なエラーが発生しました。  結果がある場合は破棄する必要があります。

原因

クエリ最適化ステージでは、SQL Serverは、クエリのさまざまなステージ (連結など) の中間結果に基づいてカーディナリティを計算しようとします。 照合順序の競合解決は最後に行われるので、クエリ オプティマイザーが認識できない可能性があり、競合する照合順序を持つ入力に対して連結カーディナリティの計算を実行しようとします。

解決策

この問題は、SQL Serverの次の累積的な更新プログラムで修正されています。

SQL Server 2016 SP1 の累積的な更新プログラム 8

SQL Server 2017 の累積的な更新プログラム 4

SQL Server 2014 SP2 の累積的な更新プログラム 9

SQL Serverの累積的な更新プログラムについて:

SQL Serverの各新しい累積的な更新プログラムには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれていたすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。

SQL Server 2016 の最新の累積的な更新プログラム

SQL Server 2017 の最新の累積的な更新プログラム

SQL Server 2014 の最新の累積的な更新プログラム

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。