J'ai créé le code suivant pour insérer dans deux tables Users
et Roles
:Aide pour la résolution d'un problème dans une affectation SQL Server
- à insérer dans la table des utilisateurs
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
maintenant Je veux faire la même chose pour une table nommée 'User_Roles', qui a deux clés étrangères de Users
et une autre de Roles
. Je l'ai écrit ce qui suit:
declare @b int
set @b = 1
while @b <= 300
begin
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)
set @b = @b + 1
end
Les deux premiers code sera exécuté correctement, mais le dernier provoque une erreur car il insérer des valeurs en double dans la clé primaire. Comment puis-je changer la dernière partie et résoudre ce problème?
Pourquoi avez-vous une colonne 'description' dans votre table de jonction? Normalement, une table de jonction ne contient que les PK des deux tables impliquées dans la relation plusieurs-à-plusieurs. –