-- 开票申请商品行补齐不含税金额与含税合计字段。 -- 使用 information_schema 判断字段是否存在,重复执行不会报重复列错误。 SET @invoice_line_schema = DATABASE(); SET @invoice_line_sql = ( SELECT IF( COUNT(*) > 0, 'ALTER TABLE `blade_invoice_application_line` MODIFY COLUMN `unit_price_no_tax` decimal(18,2) DEFAULT NULL', 'SELECT 1' ) FROM information_schema.columns WHERE table_schema = @invoice_line_schema AND table_name = 'blade_invoice_application_line' AND column_name = 'unit_price_no_tax' AND (numeric_precision <> 18 OR numeric_scale <> 2) ); PREPARE invoice_line_stmt FROM @invoice_line_sql; EXECUTE invoice_line_stmt; DEALLOCATE PREPARE invoice_line_stmt; SET @invoice_line_sql = ( SELECT IF( COUNT(*) = 0, 'ALTER TABLE `blade_invoice_application_line` ADD COLUMN `amount_no_tax` decimal(18,2) NOT NULL DEFAULT ''0.00'' COMMENT ''不含税金额'' AFTER `unit_price_no_tax`', 'SELECT 1' ) FROM information_schema.columns WHERE table_schema = @invoice_line_schema AND table_name = 'blade_invoice_application_line' AND column_name = 'amount_no_tax' ); PREPARE invoice_line_stmt FROM @invoice_line_sql; EXECUTE invoice_line_stmt; DEALLOCATE PREPARE invoice_line_stmt; SET @invoice_line_sql = ( SELECT IF( COUNT(*) = 0, 'ALTER TABLE `blade_invoice_application_line` ADD COLUMN `total_amount` decimal(18,2) NOT NULL DEFAULT ''0.00'' COMMENT ''含税合计'' AFTER `tax_amount`', 'SELECT 1' ) FROM information_schema.columns WHERE table_schema = @invoice_line_schema AND table_name = 'blade_invoice_application_line' AND column_name = 'total_amount' ); PREPARE invoice_line_stmt FROM @invoice_line_sql; EXECUTE invoice_line_stmt; DEALLOCATE PREPARE invoice_line_stmt; UPDATE `blade_invoice_application_line` SET `amount_no_tax` = ROUND( `amount_with_tax` / (1 + `tax_rate` / 100), 2 ) WHERE `amount_no_tax` = 0 AND `amount_with_tax` > 0; UPDATE `blade_invoice_application_line` SET `total_amount` = ROUND(`amount_no_tax` + `tax_amount`, 2), `amount_with_tax` = ROUND(`amount_no_tax` + `tax_amount`, 2);