2009-10-05 13 views
45

SQL "truncate table"コマンドをトランザクション内で使用できますか?私はアプリを作成していて、テーブルにはたくさんのレコードがあります。すべてのレコードを削除したいのですが、アプリが失敗した場合、私はトランザクションをロールバックしていました。各レコードを削除するのに非常に時間がかかります。 truncate tableを使用するかどうか、トランザクションをロールバックして、失敗した場合にデータを取り戻すことができますか?私は切り捨てテーブルがトランザクションログに各削除を書き込まないことに気づいていますが、ロールバックが機能するようにログにページの割り当て解除を書き込むかどうかは疑問です。トランザクション内でテーブルを切り捨てる

+1

私はMSSQL 2005サーバーを使用していることを明確にすべきでした。 –

答えて

44

SQL Serverでは、トランザクションからTRUNCATEをロールバックできます。あなたが言及したように、ページの割り当てをログに書き出します。

+0

ありがとう、トン先生。 –

15

Oracleでは、TRUNCATE TABLEはトランザクションで使用できない(正確にはロールバックできない)DDL文です。 AFAIKは、文が実行されるときに進行中のトランザクションがある場合、トランザクションはコミットされ、TRUNCATEが実行され、元に戻すことはできません。

Informixでは、TRUNCATEの動作はわずかに異なります。トランザクションでTRUNCATEを使用できますが、それ以降に許可される文はCOMMITおよびROLLBACKだけです。

他のDBMSは、おそらく、TRUNCATE TABLEの動作の独自の解釈を持っています。

関連する問題