Sql 一次放下几张桌子
我有一些桌子需要定期清理。表名有时会更改,但表名始终以“db_comp_temp”开头。是否可以编写一些SQL语句来执行以下操作:Sql 一次放下几张桌子,sql,sql-server-2008,Sql,Sql Server 2008,我有一些桌子需要定期清理。表名有时会更改,但表名始终以“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
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;
或:
您也可以使用FOR XML PATH执行此操作,但我认为,如果不将结果分组到另一个外部查询中,则没有必要这样做。我喜欢使用
调用sp_executeSQL代码>分离的DROP语句,而不是循环中的多个调用(这是我所想的),通配符ish delete是非常可怕的。您需要确保确实要删除所有内容。但是我确实喜欢这项工作。。。太棒了@ConradFrix我也在想同样的事情用一个环攻击它。。。太棒了!
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;