-- 客户主表增加合同开始时间、合同结束时间 -- 供应商只增加合同结束时间;合同开始时间与原有合作开始日期重复,已有列则删除 -- 客户列已存在时不要重复执行前面的 ALTER SET NAMES utf8mb4; -- 先去掉供应商上后加的合同开始时间,避免后续语句失败时这一列还留着 SET @has_supplier_contract_start := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sup_supplier' AND COLUMN_NAME = 'contract_start_date' ); SET @drop_supplier_contract_start := IF( @has_supplier_contract_start > 0, 'ALTER TABLE sup_supplier DROP COLUMN contract_start_date', 'SELECT 1' ); PREPARE drop_supplier_contract_start_stmt FROM @drop_supplier_contract_start; EXECUTE drop_supplier_contract_start_stmt; DEALLOCATE PREPARE drop_supplier_contract_start_stmt; ALTER TABLE ctr_customer ADD COLUMN contract_start_date date DEFAULT NULL COMMENT '合同开始时间' AFTER credit_ed, ADD COLUMN contract_end_date date DEFAULT NULL COMMENT '合同结束时间' AFTER contract_start_date; -- 供应商原有合作开始日期,只补合同结束时间(已有则跳过) SET @has_supplier_contract_end := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sup_supplier' AND COLUMN_NAME = 'contract_end_date' ); SET @add_supplier_contract_end := IF( @has_supplier_contract_end = 0, 'ALTER TABLE sup_supplier ADD COLUMN contract_end_date date DEFAULT NULL COMMENT ''合同结束时间'' AFTER cooperation_start_date', 'SELECT 1' ); PREPARE add_supplier_contract_end_stmt FROM @add_supplier_contract_end; EXECUTE add_supplier_contract_end_stmt; DEALLOCATE PREPARE add_supplier_contract_end_stmt;