Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一次放下几张桌子_Sql_Sql Server 2008 - Fatal编程技术网

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

我有一些桌子需要定期清理。表名有时会更改,但表名始终以“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;
或:


您也可以使用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;