概要
SQL Server と Oracle では、 TRUNCATE TABLE の FK に関する制限が異なります。
SQL Server で FK を無効にして TRUNCATE TABLE しようとすると下記のようなエラーになって実行できなかったので、あれ?と思って調べてみました。
メッセージ 4712、レベル 16、状態 1、行 1
FOREIGN KEY 制約でテーブル ‘テーブル名‘ が参照されているので、このテーブルは切り捨てられません。
内容
結論から言うと、次のようになります。
-
Oracle 11gリリース2(11.2) では 参照されている FK を無効にすれば TRUNCATE できます。(参照→「表の切捨ての制限事項」の項)
-
SQL Server 2008 R2 では参照されている FK が存在する場合には TRUNCATE できません。(参照→「制限」の項)
- 単に行削除ならFK制約を無効にして DELETE すればいいのですが、性能的・ログ的な問題から
- SQL Server で TRUNCATE したい場合は、 FK を削除してTRUNCATE する必要がありそうです。
- ~以上~