TRUNCATE TABLE のFKに関する制限事項

概要

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 する必要がありそうです。
        ~以上~

コメントを残す