-- prc_quote add customer_code; backfill from bms_customer -- Idempotent SET NAMES utf8mb4; SET @db := DATABASE(); SET @has := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_quote' AND COLUMN_NAME = 'customer_code' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_quote ADD COLUMN customer_code VARCHAR(50) DEFAULT NULL COMMENT ''customer code'' AFTER customer_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @hasIdx := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_quote' AND INDEX_NAME = 'idx_quote_customer_code' ); SET @sql := IF(@hasIdx = 0, 'ALTER TABLE prc_quote ADD INDEX idx_quote_customer_code (customer_code, biz_date)', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; UPDATE prc_quote q INNER JOIN bms_customer c ON c.customer_id = q.customer_id SET q.customer_code = c.customer_code WHERE q.customer_id IS NOT NULL AND q.customer_id <> 0 AND (q.customer_code IS NULL OR q.customer_code = '');