現象
1つ以上のインデックスが作成された Microsoft SQL Server テーブルがあることを前提としています。 テーブルに対してクエリを実行すると、SQL Server によって CHAR 列と BINARY 列のデータが矛盾している可能性があります。 CHAR データ列と BINARY データ列の末尾で末尾の空白を返す動作に不整合がある場合は、次の条件によって異なります。
-
SQL Server テーブルで列が作成されたときの ANSI_PADDING の設定。
-
列でテーブルスキャンまたはインデックスシークのいずれかを実行するかどうかを決定します。
原因
場合によっては、SQL Server が最適化を実行して、データ配信を高速化するために多くの操作をバイパスすることができます。 この問題は、SQL Server によって、上記のシナリオで最適化を適用できないことが認識されないために発生します。
詳細情報
SQL Server のこの動作は、次の記事に記載されている動作 ( Char データと Varchar データの使用) に準拠していません。
Char NULL 列が作成されたときに ANSI_PADDING がオンになっていると、char NOT NULL 列と同じように動作します。値は、列のサイズに対して右に埋め込まれます。 Char NULL 列が作成されたときに ANSI_PADDING がオフになっている場合は、varchar 列と同じように、ANSI_PADDING がオフになっています。末尾の空白は切り捨てられます。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで修正されています。
SQL Server 2016 SP1 の累積更新プログラム6
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
SQL Server 2017 の最新の累積的な更新プログラム
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語について説明します。