Supprimer toutes les tables dont les noms commencent par une certaine chaîne

J'aimerais qu'un script supprime toutes les tables dont le nom commence par une chaîne donnée. Je suis sûr que cela peut être fait avec du sql dynamique et les tables INFORMATION_SCHEMA.

Si quelqu'un a un script, ou peut en créer un rapidement, merci de le poster.

Si personne ne publie de réponse avant que je ne la trouve moi-même, je publierai ma solution.

请先 登录 后评论

3 réponses

Xenph Yan
SELECT 'DROP TABLE  + TABLE_NAME + ' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '[prefix]%'

Cela va générer un script.

Ajout d'une clause pour vérifier l'existence de la table avant de la supprimer :

SELECT 'IF OBJECT_ID(''' +TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '[prefix]%'
请先 登录 后评论
Blorgbeard

Merci Curt, c'est le même genre de solution que j'étais à mi-chemin de moi-même.

Le vôtre est plus agréable que le mien - il se prête facilement à des modifications. J'ai ajouté une union à la sélection et effacé certaines vues également ;)

declare @cmd varchar(4000)
declare cmds cursor for 
Select 'drop table [' + Table_Name + ']'
From    INFORMATION_SCHEMA.TABLES
Where   Table_Name like 'prefix%'
union
Select 'drop view [' + Table_Name + ']'
From    INFORMATION_SCHEMA.VIEWS
Where   Table_Name like 'prefix%'
open cmds
while 1=1
begin
    fetch cmds into @cmd
    if @@fetch_status != 0 break
    exec(@cmd)
end
close local
deallocate local

Ne vous inquiétez pas, ce n'est pas une base de données de production - c'est juste pour nettoyer facilement ma base de données de développement pendant que j'essaie des trucs.

请先 登录 后评论
Cade Roux
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
请先 登录 后评论