You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:10:04