我在插入语句时对动态插入数据有些怀疑,所以只是想得到你们的帮助。我必须做多个插入语句说基于2个不同标准的大约1500条记录,下面只是1个插入语句的示例。 现在,在执行insert语句时,我想动态分配USERID和ROLEid的2列,您可以在下面的查询中看到它们。 因此,例如,userid IN(500个不同的用户ID)和角色id(100个不同的)。
Insert into userrolelist (Userid, Roleid, IsDefault, EffectiveStart,
EffectiveEnd, Clientid, LastmodifiedUserId, LastmodifiedTimestamp)
Values (161514,1011,1,'2016-01-21 00:00:00.001',Null,16785,0,'2016-01-21
00:00:00.001')
我确信有一种方法可以根据2个不同的标准进行动态插入,我只是对如何实现这一点感到困惑。主要还因为对于插入前的每个条件,我需要检查表中是否已存在userid + roleid组合。因为如果我不检查它并仍然执行插入,它将引发错误,因为存在基于2个字段的约束。
任何有关此事的帮助将不胜感激。如果问题不是很清楚,请告诉我,如果需要,我可以添加更多解释。谢谢。
答案 0 :(得分:1)
您没有说出您的用户ID和角色ID列表来自哪里,但由于您为每个用户ID和角色ID指定了不同的编号,我认为它们是单独的列表,而不是单个列表对。我假设它们分别存储在名为userlist
和rolelist
的表中。然后你可以按如下方式进行插入:
insert into userrolelist
(Userid, Roleid, IsDefault, EffectiveStart, EffectiveEnd,
Clientid, LastmodifiedUserId, LastmodifiedTimestamp)
select
userid, roleid,
1,'2016-01-21 00:00:00.001',Null,16785,0,
'2016-01-21 00:00:00.001'
from
(select userid, roleid
from userlist
cross join rolelist
) as userrole
where
not exists (select 1 from userrolelist as ur where ur.userid=userrole.userid and ur.roleid=userrole.roleid);
子查询构造了所有可能的用户和角色对的列表,因此如果您已经有对的列表,则可以使用它来代替子查询。