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)