SQL Server 2012 で実行されたテストでDELETE FROM dbo.TableName
は、テーブル内のレコードを 1 つでも削除すると外部キー違反が発生する場合、コマンドが停止してエラーが返されることが明らかになりました。レコードは削除されません。
未使用のレコードは、外部キーの関係に違反せずに削除できるレコードであるとします。
すべてのレコードは、null 非許容の整数 ID 列によって一意に識別できると仮定します。
トリガーやカスケード削除など、副作用を引き起こす可能性のある機能は無視しても安全であると想定してください。
テーブル、そのレコード、および関係については、それ以外はほとんど想定されていません。(例: ソリューションは、これらのパラメーター内で一般的である必要があります。)
次の形式で未使用の親レコードを削除するソリューションはありますか?
- 原因となったレコードのエラーを無視し、そうでないレコードに対して正常に実行される SQL は?
- どういうわけか検出された未使用の親レコードのセットに対してのみ DELETE を実行する SQL? (FK リレーションシップがわかっている特定のテーブルに対しては簡単に実行できます。一般的に実行するのはそれほど簡単ではありません。)
- 上記のソリューションと同等の機能を実行するサーバー側のコードは?
ノート:
- C#、Python、Java、Ruby などを必要とするソリューションよりも、SQL ソリューションの方が適しています。
- クロス RDBMS ソリューションは、RDBMS 固有のソリューションよりも推奨されます。
ソリューションが適用され、テストされた RDBMS を記載してください。