Files
chill_notes/数据库/循环批量删除数据库表.md
2026-04-21 21:15:34 +08:00

1.2 KiB
Executable File
Raw Blame History

循环批量删除数据库表

SQL Server 批量删除指定条件的表

存储过程

-- 创建临时表存储表名
CREATE TABLE #Man (
    id INT IDENTITY(1,1),
    tbName NVARCHAR(50)
)

-- 插入要删除的表名(排除保留表)
INSERT INTO #Man
SELECT name 
FROM sys.tables
WHERE create_date <= '2018-03-10 15:36:35.687'
  AND name NOT IN ('DeviceNetState', 'EphInfo', 'FilterStatistic', 'UserInfo', 'AlmInfo')
ORDER BY create_date DESC

-- 确认要删除的表
SELECT * FROM #Man

-- 开始删除
DECLARE @i INT = 1
DECLARE @count INT
SELECT @count = COUNT(*) FROM #Man

DECLARE @str NVARCHAR(500)
DECLARE @tb NVARCHAR(50)

WHILE (@i <= @count)
BEGIN
    SELECT @tb = ISNULL(tbName, '') FROM #Man WHERE id = @i
    
    SET @str = 'DROP TABLE [' + @tb + ']'
    EXEC(@str)
    
    SET @i = @i + 1
END

-- 清理临时表
DROP TABLE #Man

安全建议

  1. 先 SELECT 确认:删除前先只 SELECT确认无误再执行 DELETE
  2. 排除保留表:一定要排除系统表和重要业务表
  3. 备份:生产环境先备份再执行
  4. 分批执行:大量删除时分批进行,避免锁表时间过长

⚠️ 警告:此操作不可逆,执行前务必确认!