如何批量操作带指定前缀的表数据并排除某张特定表
实现方案
首先注意你现有语句里有两处可优化点:
- 关键字拼写错误:
DELET应为DELETE - LIKE匹配规则问题:SQL中
_是通配符,代表匹配任意1个字符,你当前写的LIKE 'One_Table_'仅能匹配前缀后只有1个字符的表,无法匹配One_Table_A1、One_Table_B2这类名称更长的表。如果要匹配所有以One_Table_开头的表,需要对下划线转义,通用写法为LIKE 'One\_Table\_%' ESCAPE '\',SQL Server环境也可以用方括号包裹通配符,写成LIKE 'One[_]Table[_]%'
排除指定表的两种方案
方案1:单表排除直接加不等判断
最适合你当前只需要排除One_Table_B单个表的场景,直接在WHERE条件后追加不等于判断即可,完整语句如下:SELECT 'DELETE FROM '+TABLE_NAME +' WHERE 1=1' -- 补1=1方便后续自定义过滤条件 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'One\_Table\_%' ESCAPE '\' AND TABLE_NAME <> 'One_Table_B';方案2:多表排除用NOT IN
如果后续需要排除多个表,用NOT IN扩展性更好,修改更方便:SELECT 'DELETE FROM '+TABLE_NAME +' WHERE 1=1' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'One\_Table\_%' ESCAPE '\' AND TABLE_NAME NOT IN ('One_Table_B', '其他需要排除的表名');
小提示:生成删除语句后建议先核对输出的表名是否符合预期,确认无误后再执行实际删除操作,避免误删数据。
内容的提问来源于stack exchange,提问作者lilaaffe
相关产品推荐
相关产品推荐

