SQLで作成したテーブルが不要になった場合は、DROP文を使って削除できます。

しかし、DROP文を実行すると、テーブル内のデータだけでなく、テーブルそのものが削除されます。DELETE文のようにデータだけを削除する処理とは異なるため、使い方を間違えると必要なテーブルまで失う可能性があります。

この記事では、SQL Server LocalDBとSQL Server Management Studioを使って、サンプルテーブルの作成からDROP TABLEの実行、削除結果の確認までを順番に解説します。

実際にSQLを実行しながら確認できるため、DROP文の基本構文だけでなく、IF EXISTSを使って安全に実行する方法や、外部キー制約がある場合の注意点も理解できます。

この記事でわかること

この記事では、SSMSを使ってDROP文を実行する一連の流れを確認します。

  • SQL Server LocalDBへ接続する方法
  • DROP文とDELETE文の違い
  • DROP TABLEの基本構文
  • 動作確認用テーブルを作成する方法
  • SSMSでDROP TABLEを実行する方法
  • IF EXISTSを使ってエラーを防ぐ方法
  • 外部キー制約があるテーブルを削除するときの注意点

動作環境

この記事では、Windows環境でSQL Server LocalDBとSSMSを使う前提で進めます。

バージョンは一例です。環境によって画面表示や細かい操作が異なる場合があります。

項目内容
OSWindows 11
SQL ServerSQL Server LocalDB
管理ツールSQL Server Management Studio(SSMS)
接続先(LocalDB)\MSSQLLocalDB
使用言語SQL

環境構築ができていない場合は、以下を参考にしてください。
また、C#.NETで実行したい方は本記事と以下の記事を見ながら試行してみてください。

完成イメージ

この記事では、SSMS上で次の操作を行います。

  1. 動作確認用のデータベースを作成する
  2. サンプルテーブルを作成する
  3. サンプルデータを登録する
  4. DROP TABLEでテーブルを削除する
  5. 削除されたことを確認する

最終的には、作成したSampleProductsテーブルに対してDROP TABLEを実行し、オブジェクトエクスプローラーからテーブルが消えている状態を確認します。

DROP文を実行すると、テーブルに登録されているデータだけでなく、列の定義、主キー、インデックスなども削除されます。

DROPの実践

ここからは、SSMSを操作しながらDROP TABLEの動作を実際に確認します。

誤って既存のデータベースやテーブルを削除しないように、この記事では動作確認専用のデータベースを新しく作成します。

動作確認用データベースを作成する

DROP TABLEを安全に試すため、動作確認専用のデータベースを作成します。

クエリエディターに次のSQLを入力してください。

CREATE DATABASE DropSampleDB;

SQLを入力したら、上部の「実行」をクリックします。キーボードのF5キーでも実行できます。

一覧にDropSampleDBが表示されていれば、動作確認用データベースの作成は完了です。

DropSampleDBの作成画像

データベース作成後は、オブジェクトエクスプローラーの「データベース」を右クリックし、「最新の情報に更新」を選択します。

使用するデータベースを切り替える

続いて、SQLの実行先をDropSampleDBへ切り替えます。

次のSQLを実行してください。

USE DropSampleDB;

USE文は、これから実行するSQLの対象データベースを指定する命令です。

選択中のデータベースの確認画像

実行先を間違えると、別のデータベースにテーブルを作成したり、意図しないテーブルを削除したりする原因になります。

クエリ画面上部のデータベース選択欄でも、DropSampleDBが選択されていることを確認してください。

動作確認用テーブルを作成する

DROP TABLEで削除するためのSampleProductsテーブルを作成します。

次のSQLを実行してください。

CREATE TABLE SampleProducts
(
    ProductId INT PRIMARY KEY,
    ProductName NVARCHAR(100) NOT NULL,
    Price INT NOT NULL,
    CreatedAt DATETIME NOT NULL
);

今回作成するテーブルの内容は次のとおりです。

列名データ型内容
ProductIdINT商品ID
ProductNameNVARCHAR(100)商品名
PriceINT価格
CreatedAtDATETIME登録日時

ProductIdには主キーを設定しています。ProductName、Price、CreatedAtにはNOT NULLを指定しているため、NULLは登録できません。

SQLを実行してエラーが表示されなければSampleProductsテーブルの作成は完了です。

テーブル作成画像

サンプルデータを登録する

DROP TABLEを実行するとデータも削除されることを確認するため、SampleProductsテーブルにデータを登録します。

次のSQLを実行してください。

INSERT INTO SampleProducts
(
    ProductId,
    ProductName,
    Price,
    CreatedAt
)
VALUES
(
    1,
    N'ノートパソコン',
    120000,
    GETDATE()
),
(
    2,
    N'ワイヤレスマウス',
    3500,
    GETDATE()
),
(
    3,
    N'キーボード',
    8000,
    GETDATE()
);

このSQLでは、3件の商品データを登録しています。

テーブルデータの登録画像

登録したデータを確認するため、続けて次のSELECT文を実行します。

SELECT
    ProductId,
    ProductName,
    Price,
    CreatedAt
FROM
    SampleProducts;

実行結果に3件のデータが表示されれば、サンプルデータの登録は成功です。

テーブルデータの登録の確認画像

DROP TABLE実行後は、このデータだけでなくSampleProductsテーブル自体が削除されます。

DROP文の基本構文を確認する

テーブルを削除するときは、DROP TABLEを使用します。

基本構文は次のとおりです。

DROP TABLE テーブル名;

SampleProductsテーブルを削除する場合は、次のように記述します。

DROP TABLE SampleProducts;

DROP TABLEを実行すると、対象テーブルのデータだけでなく、テーブル定義、インデックス、トリガー、制約なども削除されます。

DELETE文はテーブル内の行を削除する命令ですが、DROP TABLEはテーブルそのものを削除する命令です。

SQL削除対象テーブル構造
DELETE条件に一致するデータ残る
TRUNCATE TABLEテーブル内の全データ残る
DROP TABLEテーブルとデータ残らない

テーブルを残したままデータだけを削除したい場合は、DROP TABLEではなくDELETE文またはTRUNCATE TABLEを使用します。

DROP TABLEを実行する

SampleProductsテーブルを削除します。

次のSQLを実行してください。

USE DropSampleDB;
DROP TABLE SampleProducts;

実行前に、次の2点を確認してください。

  • 実行先がDropSampleDBになっている
  • 削除対象がSampleProductsになっている

DROP TABLEの実行後はテーブルと登録されていた3件のデータがまとめて削除されます。

DROP TABLEの実行後画像

重要なテーブルに対して同じSQLを実行しないように注意してください。

テーブルが削除されたことを確認する

DROP TABLEの実行結果をSQLで確認します。
次のSELECT文を実行してください。

SELECT
    TABLE_SCHEMA,
    TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
WHERE
    TABLE_NAME = 'SampleProducts';

実行結果が0件であれば、SampleProductsテーブルは存在していません。

DROP TABLEの実行後確認画像

また、削除後に次のSELECT文を実行するとエラーになります。

SELECT
    ProductId,
    ProductName,
    Price,
    CreatedAt
FROM
    SampleProducts;

テーブルが存在しないため、オブジェクト名が無効であることを示すエラーが表示されます。

DROP TABLEの実行後エラー画像

IF EXISTSを使ってテーブルを削除する

存在しないテーブルに対してDROP TABLEを実行すると、エラーが発生します。

先ほど削除したSampleProductsテーブルに対して、もう一度次のSQLを実行してみます。

DROP TABLE SampleProducts;

テーブルはすでに削除されているため、次のようなエラーが表示されます。

テーブル 'SampleProducts' を削除できません。
存在しないか、権限がありません。

このようなエラーを防ぎたい場合は、IF EXISTSを付けます。

DROP TABLE IF EXISTS SampleProducts;

IF EXISTSを付けると、テーブルが存在する場合だけDROP TABLEが実行されます。

IF EXISTSを使ってテーブルを削除する画像

テーブルが存在しない場合は何も削除せず、存在しないことによるエラーも発生しません

動作確認用データベースを削除する

最後に、今回作成したDropSampleDBが不要であれば削除します。

データベースを削除するときはDROP DATABASEを使用します。

ただし、削除対象のDropSampleDBに接続したままでは削除できない場合があります。そのため、先にmasterデータベースへ切り替えます。

次のSQLを実行してください。

USE master;
DROP DATABASE IF EXISTS DropSampleDB;

実行後、オブジェクトエクスプローラーの「データベース」を右クリックし、「最新の情報に更新」を選択します。

一覧からDropSampleDBが消えていれば削除完了です。

動作確認用データベースを削除する画像

DROP DATABASEはデータベース全体を削除する命令です。テーブル、データ、ビュー、ストアドプロシージャなども削除されるため、実際の開発環境や本番環境では特に注意してください。

よくあるエラー・注意点

DROP文は対象そのものを削除するため、実行前の確認が重要です。

ここでは、DROP TABLEを実行するときに発生しやすいエラーと対処法を整理します。

エラー・現象主な原因対処法
オブジェクト名が無効ですテーブルが存在しない、または別のデータベースを参照しているUSE文やクエリ上部のデータベース名を確認する
テーブルを削除できませんテーブルが存在しない、または権限がないテーブル名と実行ユーザーの権限を確認する
FOREIGN KEY制約によって参照されています別のテーブルから外部キーで参照されている参照元の外部キー制約または参照元テーブルを先に削除する
テーブルが一覧から消えないオブジェクトエクスプローラーが更新されていない「テーブル」を右クリックし「最新の情報に更新」を実行する
間違ったテーブルを削除した実行先やテーブル名を確認せず実行したバックアップからの復元を検討する
データベースは現在使用中です削除対象のデータベースに接続中のセッションがあるmasterへ切り替え、使用中の接続を終了してから再実行する
DROP DATABASEを実行できない削除対象のデータベース上でSQLを実行しているUSE masterを実行してからDROP DATABASEを実行する

DELETE文とDROP文を間違えない

DELETE文とDROP文は、どちらも削除に関係するSQLですが、削除対象が異なります。

DELETE文はテーブルに登録されているデータを削除します。一方、DROP TABLEはテーブルそのものを削除します。

DELETE FROM SampleProducts;

このSQLでは、SampleProductsテーブルのデータが削除されますが、テーブルの列や主キーなどの構造は残ります。

DROP TABLE SampleProducts;

こちらは、SampleProductsテーブルの構造とデータをまとめて削除します。

テーブルを残したい場合はDROP TABLEを使用しないようにしてください。

実行するデータベースを確認する

同じ名前のテーブルが複数のデータベースに存在する場合、実行先を間違えると別のテーブルを削除する可能性があります。

DROP TABLEを実行する前に、次のSQLで現在のデータベースを確認できます。

SELECT DB_NAME() AS CurrentDatabase;

実行結果に表示されたデータベース名が、削除対象のテーブルがあるデータベースと一致していることを確認してください。

必要に応じて、次のようにデータベース名とスキーマ名を含めて指定する方法もあります。

DROP TABLE DropSampleDB.dbo.SampleProducts;

ただし、名前を完全修飾しても対象の確認が不要になるわけではありません。実行前にデータベース名、スキーマ名、テーブル名を確認してください。

外部キーで参照されているテーブルは削除できない

別のテーブルから外部キー制約で参照されているテーブルは、そのままDROP TABLEで削除できません。

たとえば、CategoriesテーブルをProductsテーブルが参照している場合、Categoriesテーブルを先に削除しようとするとエラーになります。

この場合は、参照元の外部キー制約を先に削除する必要があります。

ALTER TABLE Products
DROP CONSTRAINT FK_Products_Categories;

制約を削除した後で、Categoriesテーブルを削除します。

DROP TABLE Categories;

実際の制約名は、テーブルの作成方法や環境によって異なります。SSMSのオブジェクトエクスプローラーから対象テーブルの「キー」を展開して確認してください。

DROP文は実行前にバックアップを確認する

DROP文で削除したテーブルを元に戻すには、原則としてバックアップなどから復元する必要があります。

そのため、本番環境や共有データベースで実行する場合は、次の内容を確認してください。

  • 削除対象のテーブル名
  • 実行対象のデータベース
  • テーブルを参照している処理
  • 外部キーなどの依存関係
  • 復元可能なバックアップの有無

IF EXISTSを付けても誤削除は防げません。IF EXISTSは対象が存在しない場合のエラーを防ぐための構文であり、削除確認を行う機能ではありません。

まとめ

この記事では、SQL Server LocalDBとSSMSを使って、SampleProductsテーブルの作成からDROP TABLEによる削除までを確認しました。

DROP文を使用すると、テーブルのデータと構造をまとめて削除できます。

重要なポイントは次のとおりです。

  • DROP TABLEはテーブルそのものを削除する
  • DELETE文はテーブル内のデータを削除する
  • 実行前にデータベース名とテーブル名を確認する
  • IF EXISTSを付けると、対象が存在しない場合のエラーを防げる
  • 外部キーで参照されているテーブルはそのまま削除できない
  • DROP DATABASEを実行するとデータベース全体が削除される
  • 重要な環境では事前にバックアップを確認する

特に、DROP文とDELETE文の違いは必ず理解しておきましょう。

次に学ぶ内容としては、テーブルを残したままデータを削除するDELETE文とTRUNCATE TABLE、テーブル構造を変更するALTER TABLEがおすすめです。