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