it-swarm.asia

Bagaimana cara menjatuhkan beberapa tabel dengan awalan umum dalam satu permintaan?

Saya menggunakan Microsoft SQL Server 2008. Pertanyaan saya adalah: Bagaimana cara menjatuhkan beberapa tabel dengan awalan umum dalam satu permintaan?

sesuatu seperti itu nama tabel:

LG_001_01_STLINE, 
LG_001_02_STFICHE
17
Cell-o

Anda dapat membangun string menggunakan tampilan katalog, mis .: .:

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;

Tentu saja ada Gotcha potensial, misalnya jika tabel ini memiliki hubungan kunci asing, Anda harus menjatuhkannya terlebih dahulu, atau mengatur output untuk menjatuhkan tabel dalam urutan tertentu.

Untuk mendapatkan daftar tabel, gunakan:

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

Saya menjalankan kueri ini lalu menempelkan hasilnya kembali ke jendela kueri untuk menjatuhkan semua tabel:

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

Jika Anda ingin menghapus semua tabel tetapi tetap dengan nama-nama yang dimulai dengan A, B, C atau D:

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