KB4055758 - 修正: SQL Server の CHAR および BINARY データの末尾で末尾のブランクを返す一貫性のない動作

適用先
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) SQL Server 2016 Service Pack 1 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 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

現象

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 製品の問題であることを確認しました

参考資料

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