50 lines
1.5 KiB
SQL
50 lines
1.5 KiB
SQL
-- 揽收明细:补齐运单号/客户单号快照(幂等;列已存在则跳过)
|
|
-- 对应实体 PickupOrderLine.ServiceNo / ClientNo
|
|
-- 报错 Unknown column 'ServiceNo' in 'field list' 时执行本脚本
|
|
-- MySQL 5.7+ / 8.0
|
|
|
|
SET @db := DATABASE();
|
|
|
|
-- ServiceNo
|
|
SET @col := (
|
|
SELECT COUNT(*)
|
|
FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = @db
|
|
AND TABLE_NAME = 't_pickup_order_line'
|
|
AND COLUMN_NAME = 'ServiceNo'
|
|
);
|
|
SET @sql := IF(
|
|
@col = 0,
|
|
'ALTER TABLE `t_pickup_order_line` ADD COLUMN `ServiceNo` VARCHAR(64) NULL COMMENT ''运单号快照(便于列表)'' AFTER `OrderId`',
|
|
'SELECT ''skip ServiceNo'' AS msg'
|
|
);
|
|
PREPARE stmt FROM @sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
-- ClientNo
|
|
SET @col := (
|
|
SELECT COUNT(*)
|
|
FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = @db
|
|
AND TABLE_NAME = 't_pickup_order_line'
|
|
AND COLUMN_NAME = 'ClientNo'
|
|
);
|
|
SET @sql := IF(
|
|
@col = 0,
|
|
'ALTER TABLE `t_pickup_order_line` ADD COLUMN `ClientNo` VARCHAR(64) NULL COMMENT ''客户单号快照'' AFTER `ServiceNo`',
|
|
'SELECT ''skip ClientNo'' AS msg'
|
|
);
|
|
PREPARE stmt FROM @sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
-- 存量行从订单表回填快照(仅空值)
|
|
UPDATE `t_pickup_order_line` pl
|
|
INNER JOIN `t_order` o ON o.`Id` = pl.`OrderId`
|
|
SET
|
|
pl.`ServiceNo` = IFNULL(NULLIF(pl.`ServiceNo`, ''), o.`ServiceNo`),
|
|
pl.`ClientNo` = IFNULL(NULLIF(pl.`ClientNo`, ''), o.`ClientNo`)
|
|
WHERE pl.`IsDeleted` = 0
|
|
AND (pl.`ServiceNo` IS NULL OR pl.`ServiceNo` = '' OR pl.`ClientNo` IS NULL OR pl.`ClientNo` = '');
|