-- ============================================================================ -- 1.0.434:B-2A —— 把 UAT 租户 838257186181189 的 91 行 NbrControl 组织引用 -- 从 Demo 租户组织迁回本租户自己的组织。 -- -- 背景(S0-ORG-REFERENCE-MODEL-FIX / B-1 已止血): -- 2026-06-14 commit a18c8a6c5 在「单部署」假设下把 DEFAULT_COMPANY_REF_ID=1329900200001 / -- DEFAULT_FACTORY_REF_ID=1329900200002 写死进 S0 仓储页;其后 1.0.317.sql 把这两个 SysOrg -- 改挂到 Demo 租户 797403760988230,前端常量未同步 → 各租户新增都写入别租户的组织 Id。 -- B-1 已让服务端(AdoS0OrgScope.ResolveAsync)成为组织归属的唯一裁决者,新增不再产生污染; -- 本脚本只清理**当前 UAT 租户**的历史存量。 -- -- 迁移口径(2026-09-01 只读实测): -- 源:tenant_id=838257186181189 AND company_ref_id=1329900200001 AND factory_ref_id=1329900200002 -- 目标:company_ref_id = factory_ref_id = 838257186320453 -- (SysOrg.Id=838257186320453 / TenantId=838257186181189 / Code=UATTEST_CHL / Pid=0, -- 即 SysTenant(838257186181189).OrgId,与 B-1 后 AdoS0OrgScope 在该租户下的实际解析 -- 结果 C4→F4 完全一致,故迁移后与新增行同口径。) -- 全 27 张含 company_ref_id 的表扫描结果:UAT 命中**只有 NbrControl 91 行**, -- 且 91 行的 (company_ref_id, factory_ref_id) 完全一致,无需分类处理。 -- DepartmentMaster 在 UAT 下无跨租户行 → 不触碰,S8 App.json 的 -- DepartmentFactoryRefId=1329900200002 本轮不改。 -- -- 唯一键 dry run(迁移前只读预演): -- NbrControl 唯一索引只有 PRIMARY(RecID) 与 uk_NbrControl_tenant_domain_nbrtype -- (tenant_id, domain_code, NbrType)——**不含 org 列**,改 org 结构上不可能撞唯一键; -- 模拟迁移后按该唯一键 GROUP BY HAVING COUNT(*)>1 实测 conflicts = 0。 -- -- 明确不做(本批边界): -- - 不动租户 797403760988229 的另外 167 行(B-2B 另批,口径待业务确认) -- - 不动 LEGACY-NUMERIC(1000 / 0 / 1) -- - 不改 SysOrg / SysTenant / 前端 / B-1 后端逻辑 / sysOrg:list / 1.0.431 / GrantMenu -- - 不改 Type=501 语义、不补 CustMaster/StdOpMaster 缺 tenant_id 的唯一键 -- - 除两个 org 列外不写任何业务字段(NbrControl.UpdateTime 无 ON UPDATE CURRENT_TIMESTAMP, -- 本 UPDATE 不列它 → 业务字段与审计字段保持原值) -- -- 安全护栏:EXISTS 子句确保目标组织确实属于该租户;目标组织不存在或归属不符时整条语句 0 行, -- 绝不把业务数据指向一个不属于本租户的组织。 -- -- 幂等:WHERE 精确命中旧值;首次 affected_rows=91,重复执行 affected_rows=0 -- (旧值已不存在)。无该数据的库上同样为 0 行空操作。 -- ============================================================================ UPDATE `NbrControl` SET `company_ref_id` = 838257186320453, `factory_ref_id` = 838257186320453 WHERE `tenant_id` = 838257186181189 AND `company_ref_id` = 1329900200001 AND `factory_ref_id` = 1329900200002 AND EXISTS ( SELECT 1 FROM `SysOrg` o WHERE o.`Id` = 838257186320453 AND o.`TenantId` = 838257186181189 );