admin/sql/fix_concurrency_stamp_missing.sql
zzh f4ddd993b9 feat: 管理端列表返回客户名称/编码,并加固绑定与客户会话
订单/包裹/库存/店铺授权/店铺订单列表补充 customerName、customerCode;库存绑定按会话客户解析并兼容可用量;修复客户 mapId 识别与 ConcurrencyStamp 迁移。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-18 11:10:53 +08:00

64 lines
2.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 给缺少 ConcurrencyStamp 的 OMS 表补列(可重复执行)
-- Fake AggregateRoot 自带该字段,SqlSugar 查询会带上;库表没有就会报:
-- Unknown column 'ConcurrencyStamp' in 'field list'
--
-- 注意:不要用 DEFAULT (UUID())。在 STATEMENT/MIXED 复制下会触发:
-- 1674 Statement is unsafe because it uses a system function that may return a different value on the replica.
-- 默认用固定 GUID;插入/更新时由 ORM 写入真实 UUID。
--
-- 用法:在业务库执行本脚本;若仍报错,把报错 SQL 里的表名追加到下方列表。
SET @tables := 't_order_stock_bind,C_inventory,C_parcel,C_parcel_item,C_parcel_arrival,C_sku,C_bin_location,C_inbound_notice,C_inbound_box,C_inbound_box_line,C_sku_platform_map,t_sales_store,t_sales_store_order,t_sales_store_order_line,t_customer_sender_address';
DROP PROCEDURE IF EXISTS sp_add_concurrency_stamp_if_missing;
DELIMITER $$
CREATE PROCEDURE sp_add_concurrency_stamp_if_missing()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tname VARCHAR(128);
DECLARE cur CURSOR FOR
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(@tables, ',', n.n), ',', -1)) AS t
FROM (
SELECT a.N + b.N * 10 + 1 AS n
FROM
(SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a,
(SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) b
) n
WHERE n.n <= 1 + (LENGTH(@tables) - LENGTH(REPLACE(@tables, ',', '')));
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
read_loop: LOOP
FETCH cur INTO tname;
IF done THEN
LEAVE read_loop;
END IF;
IF tname IS NULL OR tname = '' THEN
ITERATE read_loop;
END IF;
IF NOT EXISTS (
SELECT 1 FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = tname
) THEN
ITERATE read_loop;
END IF;
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = tname AND COLUMN_NAME = 'ConcurrencyStamp'
) THEN
SET @ddl := CONCAT(
'ALTER TABLE `', tname,
'` ADD COLUMN `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT ''00000000-0000-0000-0000-000000000000'' COMMENT ''并发戳'''
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
CALL sp_add_concurrency_stamp_if_missing();
DROP PROCEDURE IF EXISTS sp_add_concurrency_stamp_if_missing;