[SQLServer] 特定の文字で始まるテーブルをすべて削除する方法


はじめに

特定の文字で始まるテーブルをすべて削除する場合、普通なら DROP TABLE XXXX1,XXXX2… のように指定し削除します。
DROP TABLEはワイルドカードが使えないので不便です。
今回は、特定の文字で始まるテーブルを一気に削除するクエリを紹介します。

方法

下記のクエリは同じDB内に存在するテーブルを条件とします。

use dbname

DECLARE @cmd varchar(4000)
DECLARE cmds CURSOR FOR
SELECT 'drop table [' + Table_Name + ']'
FROM INFORMATION_SCHEMA.TABLES
WHERE Table_Name LIKE 'prefix%'

OPEN cmds
WHILE 1 = 1
BEGIN
    FETCH cmds INTO @cmd
    IF @@fetch_status != 0 BREAK
    EXEC(@cmd)
END
CLOSE cmds;
DEALLOCATE cmds

1) use dbname の dbnameを今回削除対象テーブルが存在するDB名に変更してください。
2) 'prefix%’の「prefix」を削除対象テーブルの特定文字列を指定してください。

上記を事項すると、特定文字列から始まるテーブルをすべて削除することができます。

参考

以下の方法でも削除できました。

SELECT 'IF OBJECT_ID(''' +TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '[prefix]%'