Sql server 用于解决SQL Server分配中的问题的帮助

Sql server 用于解决SQL Server分配中的问题的帮助,sql-server,Sql Server,我创建了以下代码,以便在两个表中插入用户和角色: --插入到用户表中的步骤 declare @u int set @u = 1000 while @u <= 1200 begin insert into Users(UserID, Username, [Password], Email) values(@u, 'Username'+CAST(@u as varchar(4)), 'pass'+CAST(@u as varchar(4)),

我创建了以下代码,以便在两个表中插入
用户
角色

--插入到用户表中的步骤

declare @u int
set @u = 1000

while @u <= 1200
begin
   insert into Users(UserID, Username, [Password], Email)
   values(@u, 
         'Username'+CAST(@u as varchar(4)),
         'pass'+CAST(@u as varchar(4)),
         'Email'+CAST(@u as varchar(4)))

   set @u = @u + 1
end
--to insert into the Roles table
declare @a int
set @a = 1

while @a <= 100
begin
  insert into Roles (RoleID, [Role], [Description])
  values(@a, 'Admin', 'description’ + CAST(@a as varchar(4)))

  set @a = @a + 1
end

前两个代码将正确执行,但最后一个代码将导致错误,因为它将在主键中插入重复的值。如何更改最后一部分并解决此问题?

修改INSERT语句以包含GROUP BY,以消除重复的用户ID和RoleID

 insert into User_Roles(UserID, RoleID,[Description])
     select  UserID, RoleID,'Description'+CAST(@b as varchar(4))
     from Users, Roles
     where  UserID = CAST((RAND()*200+1000) as int)
     and    RoleID = CAST((RAND()*99+1)as int)
     GROUP BY UserID, RoleID 

每次通过循环时,必须确保插入的值不存在

未经测试,但类似的方法应该有效:

  insert into User_Roles(UserID, RoleID, [Description]) 
    select   
       u.UserID, r.RoleID, 'Description' + CAST(@b as varchar(4)) 
    from Users u, Roles r
    where u.UserID = CAST((RAND()*200+1000) as int) 
      and r.RoleID = CAST((RAND()*99+1)as int) 
      and NOT EXISTS(SELECT 1 from User_Roles ur WHERE ur.UserID = u.UserID AND ur.RoleId = r.RoleId)

我做到了,但这对我的问题没有帮助,我的主键中仍然有重复项@埃尔顿:你为什么要使用
RAND()
?你的连接表中为什么有
说明
列?通常,连接表只保存多对多关系中涉及的两个表中的PK。
  insert into User_Roles(UserID, RoleID, [Description]) 
    select   
       u.UserID, r.RoleID, 'Description' + CAST(@b as varchar(4)) 
    from Users u, Roles r
    where u.UserID = CAST((RAND()*200+1000) as int) 
      and r.RoleID = CAST((RAND()*99+1)as int) 
      and NOT EXISTS(SELECT 1 from User_Roles ur WHERE ur.UserID = u.UserID AND ur.RoleId = r.RoleId)