如何在一个查询中删除具有公共前缀的多个表?

Cel*_*l-o 17 sql-server-2008 sql-server drop-table

我正在使用 Microsoft SQL Server 2008。我的问题是:如何在一个查询中删除多个具有公共前缀的表?

类似于那个表名:

LG_001_01_STLINE, 
LG_001_02_STFICHE
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 35

您可以使用目录视图构建字符串,例如:

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;
Run Code Online (Sandbox Code Playgroud)

当然,存在潜在的问题,例如,如果这些表具有外键关系,您要么需要先删除它们,要么安排输出以特定顺序删除这些表。

要获取表列表,请使用:

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%';
Run Code Online (Sandbox Code Playgroud)


小智 5

我运行了这个查询,然后将结果粘贴回查询窗口以删除所有表:

SELECT 'DROP TABLE ' + NAME from sys.tables
ORDER BY NAME
Run Code Online (Sandbox Code Playgroud)

如果要删除所有表但保留名称以 A、B、C 或 D 开头的表:

SELECT 'DROP TABLE ' + NAME from sys.tables
WHERE NAME NOT LIKE '[ABCD]%'
GROUP BY NAME
Run Code Online (Sandbox Code Playgroud)