2
我有一些需要定期删除的表格。表名有时会改变,但表名始终以'db_comp_temp'开始。是否有可能写一些SQL,将有效做这样的事情:一次删除多个表格
DROP TABLE db_comp_temp*
由于提前,
我有一些需要定期删除的表格。表名有时会改变,但表名始终以'db_comp_temp'开始。是否有可能写一些SQL,将有效做这样的事情:一次删除多个表格
DROP TABLE db_comp_temp*
由于提前,
没有,是在DDL不支持通配符。
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'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 N'db[_]comp[_]temp%';
PRINT @sql;
-- EXEC sp_executesql @sql;
或者:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'
,' + 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 N'db[_]comp[_]temp%';
SET @sql = N'DROP TABLE ' + STUFF(@sql, 1, 1, '');
PRINT @sql;
-- EXEC sp_executesql @sql;
你也可以用FOR XML PATH做,但我不认为这是必要的,当你不分组结果到另一个外部查询。
我喜欢用''''分开的DROP语句对单个调用sp_executeSQL,而不是循环中的多个调用(这正是我所想的) –
通配符ish删除是相当可怕的。您需要确保您确实想要删除所有内容。不过我喜欢这项工作......它绝对精彩! – logixologist
@ConradFrix我在想同一件事情,用循环来攻击它......太棒了! – logixologist