将行从一个表复制到另一个表,并建立多对多的关系

时间:2013-07-23 12:20:09

标签: sql-server-2008 tsql

示例表(我不会弄乱用户,这只是一个示例)

-ImportUsers
--Name

-Users
--Id
--Name
-Roles
--Id
--Title
-UsersToRoles
--UserId
--RoleId

如何使用admin指定的一个角色从'ImportUsers'复制到'Users'?

P.S。 我看到了这个link,但在这种情况下这无济于事。

2 个答案:

答案 0 :(得分:3)

假设ID是用户中的标识,并且管理角色存在于角色中,并且没有现有用户,例如

insert into users( name ) 
select name from ImportUsers

insert into UsersToRoles ( UserID, RoleID ) 
select users.id , role.id 
from users, roles
where role.name = 'admin'

答案 1 :(得分:2)

您的表格和数据

create table ImportUsers (Name varchar(15))
create table Users (Id int identity(1,1), name varchar(15))
create table Roles (Id int identity(1,1), title varchar(15))
create table UsersToRoles(UserId int, RoleId int)

insert roles values('Admin')

insert ImportUsers values('Thomas')

插入数据的脚本

create table #t(id int)

--merge to ensure names will remain unique(I am assuming that is a requirement)
;MERGE INTO Users t1 
using ImportUsers t2 on t1.name = t2.name
when not matched then INSERT (Name)   
VALUES( t2.Name ) 
OUTPUT Inserted.id
INTO #t;

insert UsersToRoles (UserId, RoleId )
select t.id, r.id from #t t
join roles r
on r.Title = 'Admin'

drop table #t
--consider: delete from ImportUsers