テーブル操作
バックアップ用のテーブル作成
TableAのデータをTableA_Backupにコピー
CREATE TABLE TableA_Backup (
-- 列の定義を記述
);
INSERT INTO TableA_Backup
SELECT * FROM TableA;
※この方法は、TableA_BackupにTableAの構造を正確に反映しない可能性があることに注意してください。つまり、TableA_Backupに含まれる列のデータ型、サイズ、および NULL 許容性が、元の TableA と異なる場合があります。この場合、TableA_Backupに追加の ALTER TABLE ステートメントを追加して、列のデータ型などを手動で変更する必要があります。
一つにまとめたもの
SELECT * INTO TableA_Backup FROM TableA;
※このクエリは、TableA_Backupという新しいテーブルを作成し、そのテーブルにTableAのすべての列と行をコピーします。新しいテーブルの列のデータ型、サイズ、および NULL 許容性は、元のTableAと完全に一致します。ただし、新しいテーブルのインデックス、トリガー、制約、および権限は、元のテーブルから継承されません。
テーブルデータ削除
TRUNCATE TABLE TableA;
※このクエリは、TableAのデータをすべて削除します。TRUNCATE文は、DELETE文と比較して高速に実行されます。ただし、TRUNCATE文は、テーブルを完全に空にするだけであり、テーブルの構造、制約、およびインデックスは変更しません。また、TRUNCATE文はロールバックできないため、削除したデータを元に戻すことはできません。注意して使用してください。
DELETE文とTRUNCATE文は、Transact-SQLで使用される2つのデータの削除方法です。これらの文の違いは以下のとおりです。
削除の方法
DELETE文は、テーブルから行を1つずつ削除する方法です。TRUNCATE文は、テーブルのすべての行を一度に削除する方法です。
ロックの方法
DELETE文は、削除対象の行に対して排他的なロックを行い、それ以外の行へのアクセスは可能です。一方、TRUNCATE文はテーブル全体に対して排他的なロックを行います。したがって、TRUNCATE文はデータの削除が速い反面、他のユーザーがテーブルにアクセスできない期間があります。
ロールバックの可能性
DELETE文はトランザクションで包まれている場合には、ROLLBACK文によって削除操作を元に戻すことができます。TRUNCATE文は、実行後にROLLBACKすることはできません。
ログの生成
DELETE文は、テーブルの削除操作をログに記録します。TRUNCATE文は、テーブルの削除操作をログに記録しません。
IDENTITY値の扱い
DELETE文は、IDENTITYカラムの値を削除された行数だけ増加させます。TRUNCATE文は、テーブル全体のIDENTITYカラムの値を初期化します。
したがって、DELETE文は、行ごとに制御する必要がある場合に使用されます。一方、TRUNCATE文は、大量のデータをすばやく削除する場合に役立ちます。ただし、TRUNCATE文は、テーブルの構造を変更するため、注意して使用する必要があります。
バックアップの戻し方
TRUNCATE TABLE TableA;
INSERT INTO TableA SELECT * FROM TableA_Backup;
※これで、TableAの状態はTableA_Backupの状態に戻されます。ただし、これらの手順を実行する前に、必ずTableAのデータをバックアップするか、またはTRUNCATE TABLEやDELETE文を実行する前に確認のためにデータを抽出するなど、十分に慎重に検討してください。