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
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%';
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