DROP TABLE おさらい
テーブル定義およびそれらのテーブルのすべてのデータ、インデックス、トリガー、制約、権限の仕様を削除します。
削除されたテーブルを参照しているすべてのビューとストアド プロシージャは、明示的に削除する必要があります。
構文
DROP TABLE [ IF EXISTS ] [ database_name . [ schema_name ] . | schema_name . ] table_name [ ,...n ] [ ; ]
引数 | 説明 |
---|---|
IF EXISTS | 既に存在する場合にのみ、テーブルを削除します。1 |
database_name | データベースの名前を指定します。 |
schema_name | テーブルが所属するスキーマの名前を指定します。 |
table_name | 削除するテーブル名を指定します。 |
テーブルまとめて削除する
何かの処理中にテーブルをバックアップ(テーブル名のプリフィックスにBACKUP_を設定)して、処理後に削除。みたいなシナリオを想定してます。
FOREIGN KEY 制約や複数スキーマ等の複雑なことは想定していません。
DECLARE @sql AS nvarchar(max)
SELECT @sql=ISNULL(@sql,'') + N'DROP TABLE dbo.' + name + N';' FROM sys.tables t WHERE t.name LIKE N'BACKUP_%' AND t.type=N'U'
EXECUTE (@sql);
GO
カーソル利用例
DECLARE @cur CURSOR;
DECLARE @tblname AS nvarchar(128);
SET @cur = CURSOR FORWARD_ONLY STATIC READ_ONLY FOR SELECT name FROM sys.tables t WHERE t.name LIKE N'BACKUP_%' AND t.type=N'U';
OPEN @cur;
FETCH NEXT FROM @cur INTO @tblname;
WHILE @@FETCH_STATUS = 0
BEGIN
IF OBJECT_ID(N'dbo.' + @tblname, N'U') IS NOT NULL
EXECUTE(N'DROP TABLE dbo.' + @tblname);
FETCH NEXT FROM @cur INTO @tblname;
END;
CLOSE @cur;
GO
IF EXISTSの利用
IF EXISTS を利用するとテーブルが存在する場合のみ削除してくれます。1
--IF OBJECT_ID(N'dbo.' + @tblname, N'U') IS NOT NULL
-- EXECUTE('DROP TABLE dbo.' + @tblname);
EXECUTE('DROP TABLE IF EXISTS dbo.' + @tblname);