SQL Server
 Computer >> コンピューター >  >> プログラミング >> SQL Server

SQL ServerのTRUNCATE TABLEコマンドとは?構文・使い方・注意点を徹底解説

SQL ServerにおけるTRUNCATE TABLEステートメントは、テーブル内のすべてのレコード(行)を一括削除するためのコマンドです。動作はDELETEコマンドに似ていますが、WHERE句を指定できない点が大きな特徴です。

SQL ServerでのTRUNCATE TABLEの基本構文

TRUNCATE TABLE [データベース名.] [スキーマ名.] テーブル名
[ WITH (PARTITIONS (パーティション番号
| パーティション番号 TO パーティション番号) ) ];

各パラメータの意味

データベース名

省略可能です。指定する場合は、対象テーブルが存在するデータベースの名前を記述します。

スキーマ名

省略可能です。テーブルが属するスキーマ(名前空間)の名前を指します。

テーブル名

レコードを削除したいテーブルの名前です。

WITH (PARTITIONS (...))

省略可能で、パーティション分割されたテーブルでのみ使用できます。指定した場合は、削除対象のパーティション番号を記述します。複数のパーティションを削除したいときは、カンマで区切って列挙するか、「TO」を使って範囲指定します。パーティション化されていないテーブルに対してこの句を使うと、SQL Serverはエラーを返します。なお、この機能はすべてのバージョンのSQL Serverで利用できるわけではない点に注意してください。

TRUNCATE TABLE使用時の注意点

  1. テーブル内の全レコードを削除すると、IDENTITY列のカウンタは初期値から再びカウントされます。
  2. 外部キー(FOREIGN KEY)から参照されているテーブルの全レコードは削除できません。
  3. テーブルの全レコードを削除する前に、ALTER TABLE権限を持っている必要があります。

TRUNCATE TABLEの基本的な使用例

SQL Serverでは、削除後にデータを個別に参照し直す必要がない場合、TRUNCATE TABLEが最も高速な全件削除の手段となります。TRUNCATEでは行ごとの削除がログに詳細に記録されないため、DELETEのような処理履歴が残りません。また、DROPコマンドでテーブルを削除してCREATEコマンドで作り直すよりも手軽です。次の例を見てみましょう。

TRUNCATE TABLE nhanvien;

この例では、nhanvien(従業員)テーブルの全レコードが削除されます。

上記のコマンドは、次のDELETE文と同等の結果をもたらします。

DELETE FROM nhanvien;

どちらのコマンドもテーブル内の全データを削除します。ただし、DELETE文は各行の削除がログに記録され、トランザクション制御による復元がしやすい一方、TRUNCATE TABLEはログへの記録が最小限にとどまり高速に動作する点が異なります。

続いて、データベース名を指定した別の例を見てみましょう。

TRUNCATE TABLE totn.danhba;

この例では、totnという名前のデータベースにあるdanhba(連絡先リスト)テーブルの全エントリが削除されます。

パーティションを指定したTRUNCATE TABLEの例

特定のパーティションのレコードだけを削除したい場合は、WITH PARTITIONS句を付けてTRUNCATE TABLEを実行します。

TRUNCATE TABLE nhanvien
WITH (PARTITIONS (1 TO 5, 7));

この例では、nhanvienテーブルがパーティション分割されたテーブルであり、パーティション1〜5およびパーティション7のレコードが削除されます。

よくある質問

Q:SQL ServerでTRUNCATE TABLEを実行した後、ロールバックして元の状態に戻すことはできますか?

A:はい、可能です。TRUNCATE TABLEはトランザクション内で実行すればロールバックできます。以下に具体例を示します。

-- テスト用テーブルを作成
CREATE TABLE bang_test (cot1 int);

INSERT INTO bang_test VALUES (1);
INSERT INTO bang_test VALUES (2);
INSERT INTO bang_test VALUES (3);

-- トランザクションを開始
BEGIN TRAN;

-- テーブルのレコードを削除
TRUNCATE TABLE dbo.bang_test;

-- 削除済みテーブルをロールバック
ROLLBACK;

SELECT * FROM bang_test;

上記のSELECT文を実行すると、次の結果が返されます。

cot1
----------
1
2
3

このように、ロールバックによってデータベースの状態は元に戻り、bang_testテーブルには3件のレコードがそのまま残っていることが確認できます。

  1. SQL ServerのPIVOT句とは?クロス集計で行を列に変換する方法を実例付きで解説

    SQL Server(Transact-SQL)では、PIVOT句を使用することで、クロス集計(ピボットテーブル)を作成できます。PIVOT句は、テーブル内の行データを列に変換し、集計結果を見やすい形式で表示するための強力な機能です。 下図は、合計値を計算し、行データを列に変換して表示する例です。 PIVOT句の基本構文 SELECT cot_dautien AS bidanh_cot_dautien, [giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n] FROM ( SELECT bang_nguon.cot1

  2. SQL ServerのSELECT文の使い方を徹底解説!基本構文と実践例まとめ

    このチュートリアルでは、SQL Server(T-SQL)におけるSELECT文の使い方を、構文と具体的なサンプルコードとともにわかりやすく解説します。 SELECTは、SQL Serverデータベース内の1つまたは複数のテーブルからデータを取得するために使用される、最も基本的かつ重要なコマンドです。 SELECT文の基本構文 最もシンプルな形式では、SELECT文の構文は以下の通りです。 SELECT 式 FROM テーブル [WHERE 条件]; 一方、すべての機能を含んだ完全な形式のSELECT文は次のように記述します。 SELECT [ALL | DISTINCT] [TOP (先頭