use*_*970 2 sql sql-server-2008
我有一些桌子需要定期丢弃.表的名称有时会更改,但表名始终以'db_comp_temp'开头.是否可以编写一些实际上会执行以下操作的SQL:
DROP TABLE db_comp_temp*
Run Code Online (Sandbox Code Playgroud)
提前致谢,
不,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;
Run Code Online (Sandbox Code Playgroud)
要么:
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;
Run Code Online (Sandbox Code Playgroud)
您也可以使用FOR XML PATH执行此操作,但是当您不将结果分组到另一个外部查询时,我认为没有必要.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |