将表中列的所有值插入Sql中的另一个表的列中
我有两个表角色和菜单,并且在这两个表之间的MenuId上存在关系。两个表的关系列都有相同的名称“MenuId”。将表中列的所有值插入Sql中的另一个表的列中
菜单相应地具有主键和角色具有外键列。
我想使用一个循环从菜单表中插入菜单ID与角色表,角色表应该都从菜单表中的菜单ID(一个或多个)。
类似于下图所示。 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
要更新现有RoleId
S,你可以用你的方法稍作修改:
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:
您可以使用“INSERT INTO ... SELECT ...“语句,
DECLARE @roles int = 0
WHILE @roles < 10 --assuming that you have **10 roles** to insert
BEGIN
INSERT INTO Roles(MenuId, RoleId)
SELECT MenuId, @roles --it's a roleId you want to insert
FROM Menus m
SET @roles = @roles + 1
END
上面的语句将插入所有菜单ID对每个角色ID
更新查询更新所有记录中的相同值..我有像1,2,3,8,9,10这样的随机值,所以它应该只有这些值.. –
更新仍然有同样的问题@Vikrant和我认为它不应该是更新命令的where子句中的硬代码值。 –
我们不应该使用行号来更新值 –
创建所需的列第三位表,并执行下面的查询该表
insert into table3 (select table1.r_id,table2.menu_id from table1 cross join table2);
**想要从菜单表插入MenuId到角色表使用循环**,不需要第三个表 – Vikrant
在房间里的大象用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
您试图在查询中.update价值观,你的问题是*插入值* ...它必须是表**中的**更新值...对吗? – Vikrant
我输入了一些记录,所以想要更新他们1然后要插入新的记录,抱歉的困惑.. –
与我的查询的问题是,它的硬代码(高达65),但我只想从列(域)。 –