能否通过SQL筛选含'TOTAL%'的表并批量修改列大小?
批量修改匹配前缀的表中Salary列的方法
当然可以实现这个需求,下面分两种常见数据库给出具体实现方案:
SQL Server 实现
通过系统视图筛选表名,动态生成并执行ALTER语句:
DECLARE @sql NVARCHAR(MAX) = N''; -- 拼接所有符合条件的ALTER语句 SELECT @sql += N'ALTER TABLE ' + QUOTENAME(t.name) + N' ALTER COLUMN Salary VARCHAR(254) NOT NULL; ' FROM sys.tables t WHERE t.name LIKE 'TOTAL%' -- 额外检查表是否存在Salary列,避免报错 AND EXISTS ( SELECT 1 FROM sys.columns c WHERE c.object_id = t.object_id AND c.name = 'Salary' ); -- 执行生成的SQL语句 EXEC sp_executesql @sql;
MySQL 实现
利用information_schema系统库筛选表,拼接并执行批量修改语句:
SET @sql = ''; -- 拼接ALTER语句到变量 SELECT GROUP_CONCAT( CONCAT('ALTER TABLE `', table_name, '` ALTER COLUMN Salary VARCHAR(254) NOT NULL;') SEPARATOR ' ' ) INTO @sql FROM information_schema.tables WHERE table_schema = DATABASE() -- 限定当前数据库 AND table_name LIKE 'TOTAL%' -- 检查表是否存在Salary列 AND EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = tables.table_name AND column_name = 'Salary' ); -- 执行拼接好的SQL PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
重要注意事项
- 操作前务必备份目标表数据,防止数据丢失或损坏。
- 确认所有目标表的Salary列现有数据长度都不超过254,否则ALTER操作会失败。
- 执行前可以先打印生成的SQL语句检查正确性:SQL Server加
PRINT @sql;,MySQL加SELECT @sql;。
内容的提问来源于stack exchange,提问作者Chris Dworczyk
相关产品推荐
相关产品推荐

