-- 1.0.384 verify: UATAdminA 应绑定 UAT_FUNCTION_USER 并能解析出菜单。 -- -- 约定(AutoVersionUpdate.RunVerifyScriptIfExists): -- 每条语句取「首行首列」当布尔断言,必须为真(非 0 / 非 NULL / 非空串)。 -- 返回 0 行会得到 NULL → 判假 → 抛异常并中断启动。 -- 因此断言一律写成 SELECT ... 返回标量 1,不要写「期望 0 行」式的查询。 -- -- 环境容错:本脚本随仓库分发到所有环境,而 UATAdminA / UAT_FUNCTION_USER -- 只存在于特定 UAT 库。账号不存在时主脚本为空操作,故断言同样短路为真, -- 避免在无该账号的库上误判失败。 -- 1) 绑定已建立(账号不存在的库短路为真) SELECT IF( (SELECT COUNT(*) FROM SysUser WHERE Account = 'UATAdminA' AND Status = 1) = 0, 1, (SELECT COUNT(*) FROM SysUserRole ur JOIN SysUser u ON u.Id = ur.UserId JOIN SysRole r ON r.Id = ur.RoleId WHERE u.Account = 'UATAdminA' AND r.Code = 'UAT_FUNCTION_USER') ) AS ok_binding; -- 2) 该账号可解析出菜单(role_menus > 0,同租户对照账号为 308) SELECT IF( (SELECT COUNT(*) FROM SysUser WHERE Account = 'UATAdminA' AND Status = 1) = 0, 1, (SELECT COUNT(DISTINCT rm.MenuId) FROM SysUser u JOIN SysUserRole ur ON ur.UserId = u.Id JOIN SysRoleMenu rm ON rm.RoleId = ur.RoleId WHERE u.Account = 'UATAdminA') ) AS ok_menus; -- 3) 幂等性:不存在重复绑定(重复执行本脚本不产生第二条相同 UserId+RoleId) SELECT IF( (SELECT COUNT(*) FROM ( SELECT ur.UserId, ur.RoleId FROM SysUserRole ur JOIN SysUser u ON u.Id = ur.UserId WHERE u.Account = 'UATAdminA' GROUP BY ur.UserId, ur.RoleId HAVING COUNT(*) > 1 ) dup) = 0, 1, 0 ) AS ok_no_duplicate;