🗑️

SQL Serverでユーザーテーブルをすべて一括削除する方法

2024/10/15に公開

解法

SQL Serverで全てのユーザーテーブルを一括削除するためには、動的なクエリを使用して削除対象のテーブルを取得し、DROP TABLE文を生成して実行します。以下のクエリを利用することで実現できます。

declare @sql nvarchar(max) = '';

-- ユーザーテーブルを取得し、DROP TABLE 文を生成
select @sql += 'DROP TABLE ' + quotename(schema_name(schema_id)) + '.' + quotename(name) + '; '
from sys.tables
where is_ms_shipped = 0;

-- 動的SQLを実行
exec sp_executesql @sql;

このスクリプトは sys.tables ビューからすべてのユーザーテーブル(システムテーブルを除く)を取得し、それらに対して DROP TABLE コマンドを生成して実行します。QUOTENAME 関数を使うことで、特殊文字を含むテーブル名やスキーマ名でも適切に処理されます。

解説

このクエリは、SQL Serverのシステムビュー sys.tables を使用して、ユーザーテーブルのみを取得します。is_ms_shipped = 0 という条件により、システムテーブルを除外し、ユーザーが作成したテーブルのみを対象にしています。

QUOTENAME 関数を使うことで、テーブル名やスキーマ名に特殊文字や予約語が含まれている場合でも安全に扱うことができます。

また、sp_executesql を使用して動的SQLを実行するため、生成されたDROP TABLE文を一括して実行することが可能です。

補足情報

この操作は非常に破壊的ですので、実行する前に必ずバックアップを取得することをお勧めします。すべてのテーブルを削除するため、誤って実行するとデータが失われるリスクがありますので、運用環境での実行には細心の注意が必要です。テスト環境で十分に確認してから使用するようにしてください。

Discussion