59 lines
1.2 KiB
Markdown
Executable File
59 lines
1.2 KiB
Markdown
Executable File
# 循环批量删除数据库表
|
||
|
||
> 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. **分批执行**:大量删除时分批进行,避免锁表时间过长
|
||
|
||
---
|
||
|
||
> ⚠️ **警告**:此操作不可逆,执行前务必确认!
|