-- ===================================================================== -- 付款单付款账户改为手输:erp_finance_payment.account_id -> account_name -- ===================================================================== -- 背景: -- 1. 公司没有财务模块,付款账户不再从 erp_account 主数据选择,改为普通手输文本 -- 2. 前端已改为 Input 手输,提交字段为 accountName(String) -- 3. 后端已改为存储 accountName(对应列 account_name),不再使用 account_id -- 方案: -- 1. 若表缺少 account_name 列则补充(幂等,已存在则跳过) -- 2. 将已有 account_id 关联的账户名称回填到 account_name(仅回填空值,不覆盖手输内容) -- 3. 删除旧的 account_id 列(幂等,已删除则跳过) -- 适用数据库:MySQL 8.x -- 注意:SQL 脚本中不包含 tenant_id(项目未使用多租户) -- ===================================================================== -- 1. 确保 account_name 列存在(已存在则跳过,兼容部分迁移过的库) SET @col_exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'erp_finance_payment' AND column_name = 'account_name'); SET @sql = IF(@col_exists = 0, 'ALTER TABLE erp_finance_payment ADD COLUMN account_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT ''付款账户'' AFTER account_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 2. 迁移已有数据:仅当 account_name 为空时,用 account_id 关联的账户名称回填(不覆盖已手输的值) UPDATE erp_finance_payment p LEFT JOIN erp_account a ON p.account_id = a.id SET p.account_name = a.name WHERE (p.account_name IS NULL OR p.account_name = '') AND p.deleted = 0; -- 3. 删除旧的 account_id 列(已删除则跳过) SET @col_exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'erp_finance_payment' AND column_name = 'account_id'); SET @sql = IF(@col_exists = 1, 'ALTER TABLE erp_finance_payment DROP COLUMN account_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;