it-swarm.it

Come eliminare più tabelle con prefisso comune in una query?

Sto utilizzando Microsoft SQL Server 2008. La mia domanda è: come eliminare più tabelle con prefisso comune in una query?

qualcosa come i nomi di quella tabella:

LG_001_01_STLINE, 
LG_001_02_STFICHE
17
Cell-o

Puoi creare una stringa usando le viste del catalogo, ad es .:

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;

Ovviamente ci sono potenziali gotcha, ad esempio se queste tabelle hanno relazioni di chiave esterna, dovrai prima lasciarle cadere, o disporre l'output per far cadere le tabelle in un certo ordine.

Per ottenere l'elenco delle tabelle, utilizzare:

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

Ho eseguito questa query, quindi ho incollato i risultati nella finestra della query per eliminare tutte le tabelle:

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

Se si desidera eliminare tutte le tabelle ma conservare quelle con nomi che sono iniziati con A, B, C o D:

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