現象
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 が ON の場合、char NOT NULL 列と同じように動作します。値は列のサイズに対して右パディングされます。 char NULL 列の作成時に ANSI_PADDING が OFF の場合、ANSI_PADDING OFF が設定された varchar 列のように動作し、末尾の空白は切り捨てられます。
解決策
この問題は、次の SQL Server の累積的な更新プログラムで修正されています。
SQL Server 2017 の累積的な更新プログラム 2
SQL Server 2016 の累積的な更新プログラム 9
SQL Server 2016 SP1 の累積的な更新プログラム 6
SQL Server 2014 SP2 の累積的な更新プログラム 8
SQL Server 2014 SP1 の累積的な更新プログラム 7
SQL Server の累積的な更新プログラムについて:
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
SQL Server 2017 の最新の累積的な更新プログラム
SQL Server 2016 の最新の累積的な更新プログラム
SQL Server 2014 の最新の累積的な更新プログラム
状態
マイクロソフトでは、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。