我有两个表Roles和Menus,这两个表之间的MenuId有关系。两个表都具有相同名称的关系列" MenuId"。
菜单具有主键,而角色具有相应的外键列。
我想使用循环将Menus表中的MenuId插入Roles表,Roles表应该包含Menus表中的所有MenuId。
如下图所示。 RoleID 1然后是所有MenuID,然后是RoleId 2,再次是所有MenuID。
但我不想使用触发器插入。
我尝试过类似的事情: -
DECLARE @counter int
SET @counter = 0
WHILE @counter < 65 BEGIN
UPDATE Roles SET MenuId = @counter + 1
SET @counter = @counter + 1
END
答案 0 :(得分:1)
要更新现有的Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
.create();
,您可以使用稍加修改的方法:
RoleId
之后,如果要为每个RoleId插入每个MenuId:
你可以使用&#34; INSERT INTO ... SELECT ... &#34;声明为,
DECLARE @counter int =0
DECLARE @records int
SELECT @records = COUNT(MenuId) FROM Menus
WHILE @counter < @records
BEGIN
UPDATE Roles SET MenuId = @counter + 1
WHERE RoleId = 1
SET @counter = @counter + 1
END
以上查询将针对每个RoleId插入所有MenuId
答案 1 :(得分:1)
创建一个包含所需列的第3个表,并在该表上执行以下查询
insert into table3 (select table1.r_id,table2.menu_id from table1 cross join table2);
答案 2 :(得分:0)
在使用SQL时,房间里的大象正在循环中做事 - 性能通常非常糟糕,你几乎不需要。
您的数据库结构并不完全清楚,但这应该指向正确的方向:
create table Menu
(
MenuId int
);
create table Role
(
RoleId int
);
create table RoleMenu
(
RoleId int,
MenuId int
);
insert into Menu(MenuId) values(1),(2),(3);
insert into Role(RoleId) values(1),(2),(3),(4);
-- some data already in table
insert into RoleMenu(RoleId, MenuId) values(1,1), (1,2);
with cte as (
select distinct RoleId, MenuId
from Menu
cross join Role
)
insert into RoleMenu(RoleId, MenuId)
select cte.RoleId, cte.MenuId
from cte
left outer join RoleMenu rm on cte.MenuId = rm.MenuId and cte.RoleId = rm.RoleId
where rm.RoleId is null -- don't insert where we already have data
select * from RoleMenu order by RoleId, MenuId