-- 9610 单号命名对齐运单 t_order(幂等) -- ReferenceNo → ClientNo(客户单号) -- LogisticsNo 并入 ServiceNo(运单号)后删除 LogisticsNo SET @db := DATABASE(); -- 1) ReferenceNo → ClientNo SET @hasRef := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='ReferenceNo' ); SET @hasClient := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='ClientNo' ); SET @sql := IF( @hasRef > 0 AND @hasClient = 0, 'ALTER TABLE `t_9610_order` CHANGE COLUMN `ReferenceNo` `ClientNo` VARCHAR(48) NOT NULL DEFAULT '''' COMMENT ''客户单号(对齐 t_order.ClientNo / 上游 referenceNo)''', 'SELECT ''skip ReferenceNo->ClientNo'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 索引名顺带调整(旧 idx_9610_ref → idx_9610_client_no) SET @idxRef := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_ref' ); SET @idxClient := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_client_no' ); SET @sql := IF( @idxRef > 0 AND @idxClient = 0, 'ALTER TABLE `t_9610_order` RENAME INDEX `idx_9610_ref` TO `idx_9610_client_no`', 'SELECT ''skip rename idx_9610_ref'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @idxClient := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_client_no' ); SET @sql := IF( @idxClient = 0, 'ALTER TABLE `t_9610_order` ADD KEY `idx_9610_client_no` (`ClientNo`)', 'SELECT ''skip add idx_9610_client_no'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 2) LogisticsNo → 回填 ServiceNo,再删列 SET @hasLog := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='LogisticsNo' ); SET @sql := IF( @hasLog > 0, 'UPDATE `t_9610_order` SET `ServiceNo` = NULLIF(TRIM(`LogisticsNo`), '''') WHERE (`ServiceNo` IS NULL OR TRIM(`ServiceNo`) = '''') AND `LogisticsNo` IS NOT NULL AND TRIM(`LogisticsNo`) <> ''''', 'SELECT ''skip backfill ServiceNo'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @idxLog := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_logistics' ); SET @sql := IF( @idxLog > 0, 'ALTER TABLE `t_9610_order` DROP INDEX `idx_9610_logistics`', 'SELECT ''skip drop idx_9610_logistics'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @hasLog := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='LogisticsNo' ); SET @sql := IF( @hasLog > 0, 'ALTER TABLE `t_9610_order` DROP COLUMN `LogisticsNo`', 'SELECT ''skip drop LogisticsNo'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ServiceNo 索引(检索) SET @idxSvc := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_service_no' ); SET @sql := IF( @idxSvc = 0, 'ALTER TABLE `t_9610_order` ADD KEY `idx_9610_service_no` (`ServiceNo`)', 'SELECT ''skip idx_9610_service_no'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- OrderNo 注释对齐:海关下游订单编号(非运单 DownstreamServiceNo) SET @hasOrderNo := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='OrderNo' ); SET @sql := IF( @hasOrderNo > 0, 'ALTER TABLE `t_9610_order` MODIFY COLUMN `OrderNo` VARCHAR(32) NULL COMMENT ''海关下游订单编号(申报回写,非 t_order.DownstreamServiceNo)''', 'SELECT ''skip OrderNo comment'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- DownstreamRefNo 注释 SET @hasDr := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='DownstreamRefNo' ); SET @sql := IF( @hasDr > 0, 'ALTER TABLE `t_9610_order` MODIFY COLUMN `DownstreamRefNo` VARCHAR(32) NULL COMMENT ''申报回写的 referenceNo 快照''', 'SELECT ''skip DownstreamRefNo comment'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;