0

複数の場所 (10 以上のテーブル) でレコードが使用されているメンバー テーブルがあります。すべて制約付きで参照されます。

これまでのところ、SQL エンジンが制約にぶつかった最初の場所を確認できます (レコードを削除しようとしたときのエラー メッセージ 547 から)。削除しようとしているレコードが使用されているすべての場所を見つけることができれば、非常に便利です。

4

1 に答える 1

0

通常、SQL データベース管理システムはその機能を公開しません。何百もの外部キーによって参照されるテーブルの場合、考えられるすべての違反を特定して返すことは、最初の違反だけを返すよりもはるかにコストがかかります。

次のようなストアド プロシージャを作成できます。

  • 外部キー制約のシステム テーブルを読み取ります。
  • を持つ FK 制約を無視しますon delete cascade
  • 行の削除を防ぐ FK 値を参照しているすべてのテーブルをチェックし、
  • これらのテーブル名 (または制約名、テーブル名と列名、またはテーブル名と、失敗の原因となっているアクションの種類など) を返します。

しかし、それはあなたが得るもののために多くの仕事のように聞こえます. この種の問題を解決するためのより良い方法があるかもしれません。(考えられるすべての FK 制約エラーを見つけようとするよりも優れています。)

于 2013-01-18T12:44:56.460 に答える