データベース内のすべてのテーブルを1回の操作で切り捨てるクエリ(コマンド)はありますか? 1つのクエリでできるかどうかを知りたいのです。
MS SQL Server 2005+ (実際の実行時にはPRINTを削除してください...)
EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''
お使いのデータベースプラットフォームが INFORMATION_SCHEMA ビューをサポートしている場合、以下のクエリの結果を取り出して実行します。
SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
MySQLの場合はこちらをお試しください。
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES
Concat にセミコロンを追加すると、mysql workbench などで使いやすくなります。
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES
SQL Server 2005を使用している場合、データベース内のすべてのテーブルに対してコマンドまたはコマンドのセットを実行できる隠しストアドプロシージャがあります。このストアドプロシージャを使って、TRUNCATE TABLE
を呼び出す方法を紹介します。
EXEC [sp_MSforeachtable] @command1="TRUNCATE TABLE ?"
こちらにさらに詳しく書かれた記事があります。
しかし、MySqlの場合は、mysqldumpを使い、--add-drop-tables
と--no-data
オプションを指定して、データを無視してすべてのテーブルをドロップして作成することができます。
mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE]
案としては、テーブルを削除して再作成することでしょうか。
編集:
@Jonathan Leffler: そうですね。
その他の提案 (または、すべてのテーブルを切り詰める必要がない場合)。
特定のテーブルを切り詰めるための基本的なストアドプロシージャを作成してみてはいかがでしょうか。
CREATE PROCEDURE [dbo].[proc_TruncateTables]
AS
TRUNCATE TABLE Table1
TRUNCATE TABLE Table2
TRUNCATE TABLE Table3
GO