it-swarm.dev

Jak usunąć wiele tabel ze wspólnym prefiksem w jednym zapytaniu?

Używam Microsoft SQL Server 2008. Moje pytanie brzmi: jak usunąć wiele tabel ze wspólnym prefiksem w jednym zapytaniu?

coś w rodzaju tych nazw tabel:

LG_001_01_STLINE, 
LG_001_02_STFICHE
17
Cell-o

Możesz zbudować ciąg za pomocą widoków katalogu, np .:

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;

Oczywiście istnieją potencjalne luki, na przykład jeśli te tabele mają powiązania z kluczem obcym, musisz je najpierw usunąć lub ustawić wyniki tak, aby tabele były usuwane w określonej kolejności.

Aby uzyskać listę tabel, użyj:

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

Uruchomiłem to zapytanie, a następnie wkleiłem wyniki z powrotem do okna zapytania, aby usunąć wszystkie tabele:

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

Jeśli chcesz usunąć wszystkie tabele, ale zachowaj te o nazwach zaczynających się od A, B, C lub D:

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