-- ============================================= -- 调岗申请:允许「原部门」「原岗位」为空 -- -- 问题:hrm_transfer_application.current_dept_id / current_post_id 为 NOT NULL 且无默认值, -- 而客户环境 133 个员工全部没有配置岗位(hrm_employee.post_id 为 NULL), -- 前端提交调岗申请时这两个字段为空 → insert 报 -- "Field 'current_post_id' doesn't have a default value" → 调岗申请一直提交失败。 -- -- 处理:把这两列改为允许 NULL。原部门/原岗位属于「申请时的快照」,员工档案未配置时为空是合理的, -- 不应因此阻断申请。目标部门/目标岗位仍保持 NOT NULL(前端必填,属于业务必需)。 -- -- 脚本可重复执行(幂等) -- ============================================= SET NAMES utf8mb4; SET @sch := DATABASE(); -- 1. 原岗位允许为空 SET @nullable := (SELECT IS_NULLABLE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @sch AND TABLE_NAME = 'hrm_transfer_application' AND COLUMN_NAME = 'current_post_id'); SET @sql := IF(@nullable = 'NO', 'ALTER TABLE `hrm_transfer_application` MODIFY COLUMN `current_post_id` bigint NULL DEFAULT NULL COMMENT ''原岗位ID(员工未配置岗位时为空)''', 'SELECT ''current_post_id 已允许为空'' AS msg'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 2. 原部门允许为空 SET @nullable := (SELECT IS_NULLABLE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @sch AND TABLE_NAME = 'hrm_transfer_application' AND COLUMN_NAME = 'current_dept_id'); SET @sql := IF(@nullable = 'NO', 'ALTER TABLE `hrm_transfer_application` MODIFY COLUMN `current_dept_id` bigint NULL DEFAULT NULL COMMENT ''原部门ID(员工未配置部门时为空)''', 'SELECT ''current_dept_id 已允许为空'' AS msg'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 3. 核对 SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @sch AND TABLE_NAME = 'hrm_transfer_application' AND COLUMN_NAME IN ('current_dept_id','current_post_id','target_dept_id','target_post_id') ORDER BY ORDINAL_POSITION; SELECT '调岗申请 原部门/原岗位 允许为空 初始化完成' AS result;