web-dev-qa-db-fra.com

Comment supprimer plusieurs tables avec un préfixe commun dans une seule requête?

J'utilise Microsoft SQL Server 2008. Ma question est: comment supprimer plusieurs tables avec un préfixe commun dans une seule requête?

quelque chose comme ça les noms de table:

LG_001_01_STLINE, 
LG_001_02_STFICHE
17
Cell-o

Vous pouvez créer une chaîne à l'aide des vues de catalogue, par exemple:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += '
DROP TABLE ' 
    + QUOTENAME(s.name)
    + '.' + QUOTENAME(t.name) + ';'
    FROM sys.tables AS t
    INNER JOIN sys.schemas AS s
    ON t.[schema_id] = s.[schema_id] 
    WHERE t.name LIKE 'LG_001%';

PRINT @sql;
-- EXEC sp_executesql @sql;

Bien sûr, il existe des problèmes potentiels, par exemple si ces tables ont des relations de clé étrangère, vous devrez d'abord les supprimer ou organiser la sortie pour supprimer les tables dans un certain ordre.

Pour obtenir simplement la liste des tableaux, utilisez:

SELECT s.name, t.name 
  FROM sys.tables AS t 
  INNER JOIN sys.schemas AS s 
  ON t.[schema_id] = s.[schema_id] 
  WHERE t.name LIKE 'LG_001%';
34
Aaron Bertrand

J'ai exécuté cette requête, puis collé les résultats dans la fenêtre de requête pour supprimer toutes les tables:

SELECT 'DROP TABLE ' + NAME from sys.tables
ORDER BY NAME

Si vous souhaitez supprimer toutes les tables mais conserver celles dont le nom commence par A, B, C ou D:

SELECT 'DROP TABLE ' + NAME from sys.tables
WHERE NAME NOT LIKE '[ABCD]%'
GROUP BY NAME
4
Mike