SET XACT_ABORT ON; BEGIN TRANSACTION; DECLARE @menuUrl nvarchar(100); DECLARE @menuId int; DECLARE menu_cursor CURSOR LOCAL FAST_FORWARD FOR SELECT Url FROM (VALUES (N'/studentsManage'), (N'/sportsHallClass')) AS menus(Url); OPEN menu_cursor; FETCH NEXT FROM menu_cursor INTO @menuUrl; WHILE @@FETCH_STATUS = 0 BEGIN IF (SELECT COUNT(*) FROM Sys_Menu WHERE Url = @menuUrl AND ParentId > 0 AND MenuType = 0 AND Enable IN (1, 2)) <> 1 THROW 51001, N'页面菜单不存在或不唯一,请检查菜单配置', 1; SELECT @menuId = Menu_Id FROM Sys_Menu WHERE Url = @menuUrl AND ParentId > 0 AND MenuType = 0 AND Enable IN (1, 2); IF EXISTS (SELECT 1 FROM Sys_Menu WHERE Menu_Id = @menuId AND NULLIF(LTRIM(RTRIM(Auth)), N'') IS NOT NULL AND (ISJSON(Auth) <> 1 OR LEFT(LTRIM(Auth), 1) <> N'[')) THROW 51002, N'菜单权限不是有效 JSON 数组,请先检查原始数据', 1; UPDATE Sys_Menu SET Auth = COALESCE(NULLIF(Auth, N''), N'[]') WHERE Menu_Id = @menuId AND (Auth IS NULL OR Auth = N''); UPDATE menu SET Auth = JSON_MODIFY(menu.Auth, 'append $', JSON_QUERY(N'{"text":"批量删除","value":"BatchDelete"}')) FROM Sys_Menu AS menu WHERE menu.Menu_Id = @menuId AND NOT EXISTS (SELECT 1 FROM OPENJSON(menu.Auth) WITH (Value nvarchar(100) '$.value') AS action WHERE action.Value = N'BatchDelete'); FETCH NEXT FROM menu_cursor INTO @menuUrl; END; CLOSE menu_cursor; DEALLOCATE menu_cursor; COMMIT TRANSACTION; SELECT MenuName, Url, Auth FROM Sys_Menu WHERE Url IN (N'/studentsManage', N'/sportsHallClass') AND ParentId > 0 AND MenuType = 0; GO