修正: 参照整合性制約は評価されません正しく 2016 の SQL Server でのオペレーターの外部キー参照を確認し、2017 クエリ実行プランを使用する場合

適用対象: SQL Server 2017 Developer WindowsSQL Server 2017 Enterprise WindowsSQL Server 2017 Enterprise Core Windows

現象


テーブルからデータを削除しようとして、データを Microsoft SQL Server 2016、2017 の他のテーブルで参照されていることを想定しています。にクエリを表示する f実行プランでは、することができるよう、外部キーの参照を確認して演算子を使用して.このような場合は、の次のエラー メッセージが表示される場合がある場合でも、行中削除された他のテーブルで参照されていません:

メッセージ 547、レベル 16、状態 0、行の行番号

DELETE ステートメントが参照制約と競合しています

状態


マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

解決方法


SQL Server の次の累積的な更新プログラムでこの問題が修正します。

2016 SP2 の SQL Server の累積的な更新 6 でこの問題が修正します。

に関する SQL Server 用の累積的な更新。

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

回避策


この問題を回避するには、以下のいずれかの方法を使用します。

  • 130 以下の互換性レベルを使用して、このクエリを実行します。
  • 参照元テーブルのインデックスの構造を変更します。

詳細情報


開始データベースの互換性レベルの構成のスコープ2016 の SQL Server で 130、クエリの実行プランは、外部キー参照を使用できます。テーブル内の行が他のすべての行で参照されているかどうかを確認するのには演算子を確認します。参照整合性制約を使用してテーブルです。場合に、このような演算子を使用できます。多数の外部のテーブルでテーブルを参照します。この演算子では、SQL Server は、このようなチェックを実行する各参照元のテーブルのインデックスを選択します。もし参照元のテーブルが複数のキー列のインデックスは、このようないくつか先頭列は、外部キーが、その他の部分ではないです。列は、外部キーの一部です。実行されるチェックが正しくない可能性があります。によって SQL Server です。

例えば、次のスキーマがあるとします。

表 tpk (pk int 型の制約を作成します。安定クラスター化主キー)

テーブルの tfk (int 型、int 型の外部キーを作成します。制約 cfk の外部キー参照の tpk、インデックスの ia clustered(a,fk))

このようなスキーマが変更する場合、この問題があります。列の順序のインデックスを作成する ia (fk、)、それは表示されません。

関連情報


については、  用語集Microsoft を使用して、ソフトウェア更新プログラムについて説明することです