diff --git a/doc/sql/transport/blade_pre_settlement_advance_uk_20261028.sql b/doc/sql/transport/blade_pre_settlement_advance_uk_20261028.sql new file mode 100644 index 00000000..e8e6fdae --- /dev/null +++ b/doc/sql/transport/blade_pre_settlement_advance_uk_20261028.sql @@ -0,0 +1,33 @@ +-- 预结算预付记录表:唯一键调整(支持付款申请多选预结算单,每张预结算单各建一条台账) +-- 原唯一键 uk_pre_settlement_advance_no(tenant_id, advance_no) 与多选预结算单联动建档冲突: +-- 同一付款申请为多张预结算单建档时 advance_no 相同,第二条插入报 Duplicate entry。 +-- 调整为 uk_pre_settlement_advance_no(tenant_id, pre_settlement_id, advance_no)。 +-- 幂等脚本,可重复执行:旧键存在且不含 pre_settlement_id 才删,目标键不存在才加。 +SELECT IF( + EXISTS(SELECT 1 FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'blade_pre_settlement_advance' + AND index_name = 'uk_pre_settlement_advance_no') + AND NOT EXISTS(SELECT 1 FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'blade_pre_settlement_advance' + AND index_name = 'uk_pre_settlement_advance_no' + AND column_name = 'pre_settlement_id'), + 'ALTER TABLE `blade_pre_settlement_advance` DROP INDEX `uk_pre_settlement_advance_no`', + 'DO 0' +) INTO @drop_sql; +PREPARE stmt FROM @drop_sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SELECT IF( + NOT EXISTS(SELECT 1 FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'blade_pre_settlement_advance' + AND index_name = 'uk_pre_settlement_advance_no'), + 'ALTER TABLE `blade_pre_settlement_advance` ADD UNIQUE KEY `uk_pre_settlement_advance_no` (`tenant_id`, `pre_settlement_id`, `advance_no`) USING BTREE', + 'DO 0' +) INTO @add_sql; +PREPARE stmt FROM @add_sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt;