テーブル操作

バックアップ用のテーブル作成
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文を実行する前に確認のためにデータを抽出するなど、十分に慎重に検討してください。


いいなと思ったら応援しよう!