名前が特定の文字列で始まるすべてのテーブルを削除するにはどうすればよいですか?
INFORMATION_SCHEMA
これは、いくつかの動的SQLとテーブルを使用して実行できると思います。
名前が特定の文字列で始まるすべてのテーブルを削除するにはどうすればよいですか?
INFORMATION_SCHEMA
これは、いくつかの動的SQLとテーブルを使用して実行できると思います。
データベースに複数の所有者が存在する場合は、所有者を含めるようにクエリを変更する必要がある場合があります。
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
これは、スクリプトの生成と実行の2段階のアプローチを使用するよりもクリーンです。ただし、スクリプト生成の利点の1つは、実際に実行される前に、実行される内容全体を確認できることです。
これを本番データベースに対して行う場合は、可能な限り注意する必要があることを私は知っています。
コードサンプルの編集を修正しました。
SELECT 'DROP TABLE "' + TABLE_NAME + '"'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '[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]%'
Oracle XE では次のように動作します。
SELECT 'DROP TABLE "' || TABLE_NAME || '";'
FROM USER_TABLES
WHERE TABLE_NAME LIKE 'YOURTABLEPREFIX%'
または、制約を削除してスペースも解放したい場合は、次を使用します。
SELECT 'DROP TABLE "' || TABLE_NAME || '" cascade constraints PURGE;'
FROM USER_TABLES
WHERE TABLE_NAME LIKE 'YOURTABLEPREFIX%'
これは一連のDROP TABLE cascade constraints PURGE
ステートメントを生成します...
これを使用するにはVIEWS
:
SELECT 'DROP VIEW "' || VIEW_NAME || '";'
FROM USER_VIEWS
WHERE VIEW_NAME LIKE 'YOURVIEWPREFIX%'
これが私の解決策です:
SELECT CONCAT('DROP TABLE `', TABLE_NAME,'`;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'TABLE_PREFIX_GOES_HERE%';
TABLE_PREFIX_GOES_HERE
そしてもちろん、プレフィックスに置き換える必要があります。
@Xenph Yan に基づいてすべての WordPress テーブルを削除する mysql ステートメントを探していたときに、この投稿を見ました。
SELECT CONCAT( 'DROP TABLE `', TABLE_NAME, '`;' ) AS query
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'wp_%'
これにより、wp_ で始まるすべてのテーブルのドロップ クエリのセットが得られます。
CREATE PROCEDURE usp_GenerateDROP
@Pattern AS varchar(255)
,@PrintQuery AS bit
,@ExecQuery AS bit
AS
BEGIN
DECLARE @sql AS varchar(max)
SELECT @sql = COALESCE(@sql, '') + 'DROP TABLE [' + TABLE_NAME + ']' + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE @Pattern
IF @PrintQuery = 1 PRINT @sql
IF @ExecQuery = 1 EXEC (@sql)
END
Xenph Yanの答えは私のものよりはるかにきれいでしたが、ここに私のものはすべて同じです。
DECLARE @startStr AS Varchar (20)
SET @startStr = 'tableName'
DECLARE @startStrLen AS int
SELECT @startStrLen = LEN(@startStr)
SELECT 'DROP TABLE ' + name FROM sysobjects
WHERE type = 'U' AND LEFT(name, @startStrLen) = @startStr
tableName
検索したい文字に変更するだけです。
デフォルトのスキーマにないテーブルを持っていたので、Xenph Yan の答えを少し派生させなければなりませんでした。
SELECT 'DROP TABLE Databasename.schema.' + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'strmatch%'
SELECT 'if object_id(''' + TABLE_NAME + ''') is not null begin drop table "' + TABLE_NAME + '" end;'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '[prefix]%'
一時テーブルの場合は、試してみてください
SELECT 'DROP TABLE "' + t.name + '"'
FROM tempdb.sys.tables t
WHERE t.name LIKE '[prefix]%'