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)