# 循环批量删除数据库表 > SQL Server 批量删除指定条件的表 ## 存储过程 ```sql -- 创建临时表存储表名 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. **分批执行**:大量删除时分批进行,避免锁表时间过长 --- > ⚠️ **警告**:此操作不可逆,执行前务必确认!