如何将SQL Server 2008表从一个DB导入到另一个DB中的多个表中?

时间:2014-12-24 12:35:32

标签: database sql-server-2008

我正在尝试将表从旧数据库(SQL Server 2008)迁移到具有不同表结构的新数据库(也称为SQL Server 2008)。这是一个旧的CMS,我试图将用户数据导入新的,不同的CMS。

原始表有5列,用户名,密码,电子邮件,名字,姓氏。

在新数据库中,此信息单独存储在3个其他表中。

tbl_Contacts
Contact_ID,电话,电子邮件

tbl_user_contact
Contact_ID,User_ID

tbl_user
User_ID,用户名,密码,名字,姓氏

大多数数据都会转到tbl_user,我想我需要先将信息放到这里,以创建一个独特的User_ID。 然后,我需要将手机和电子邮件数据添加到tbl_contacts以创建唯一Contact_ID,然后最终在tbl_user_contact中创建新条目并导入Contact_IDUser_ID

我确信这一定是可能的,但我不知道从哪里开始。我有大约900个用户导入到新的CMS,这可以用SQL完成吗?也许是一个存储过程或者最好是创建一个.net脚本?

这将是一次性导入,因为一旦完成,管理员将向用户添加已内置于CMS的'add user'功能。

如有任何问题,请询问。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如何实现所需的解决方案有很多方法。我为您提供了多种可能的实施方案。

create table original_table
(
    username nvarchar(100), 
    [password] nvarchar(100), 
    email nvarchar(100), 
    firstname  nvarchar(100), 
    surname  nvarchar(100)
);

insert into original_table (username, [password], email, firstname, surname) values
('user1', 'jhwe7y784', 'john@mail.com', 'John', 'Smith'),
('user2', 'srce45', 'bob@mail.com', 'Bob', 'Rolan'),
('user3', '4c5456656c', 'katty@mail.com', 'Katty', 'Moon'),
('user4', 'hhhh8737y4434', 'katty@mail.com', 'Katty', 'Moon');


-- prepare (adding unique id to original table)
select row_number() over(order by email) [id]
, username, [password], email, firstname, surname
into #original_table_with_id
from original_table;


-- tbl_Contacts 
create table tbl_Contacts (Contact_ID int, Phone nvarchar(20), Email nvarchar(50));

insert into tbl_Contacts (Contact_ID, Phone, Email)
select distinct Contact_ID, Phone, Email
from (
    select id /*unique contact identifier*/ [Contact_ID]
    , '' [Phone]
    , email [Email]
    from #original_table_with_id
) as t


-- tbl_user 
create table tbl_user ([User_ID] int, UserName nvarchar(100), [Password] nvarchar(100), firstname nvarchar(100), surname nvarchar(100));

insert into tbl_user (User_ID, UserName, Password, firstname, surname)
select distinct [User_ID], UserName, [Password], firstname, surname
from (
    select rank() over(order by username /*unique user identifier*/) [User_ID]
    , username
    , Password
    , firstname
    , surname
    from #original_table_with_id
) as t;


-- tbl_user_contact 
create table tbl_user_contact (Contact_ID int, [User_ID] int);

insert into tbl_user_contact (Contact_ID, User_ID)
select distinct c.Contact_ID, u.[User_ID]
from #original_table_with_id o
join tbl_Contacts c on c.Contact_ID = o.id /*unique contact identifier*/
join tbl_user u on u.username = o.username /*unique user identifier*/


-- results
select username, [password], email, firstname, surname from #original_table_with_id;
select u.UserName, u.[Password], c.Email, u.firstname, u.surname
from tbl_user_contact uc
join tbl_Contacts c on c.Contact_ID = uc.Contact_ID
join tbl_user u on u.[User_ID] = uc.[User_ID]

结果

原始表格

username    password        email           firstname   surname
---------------------------------------------------------------
user1       jhwe7y784       john@mail.com   John        Smith
user2       srce45          bob@mail.com    Bob         Rolan
user3       4c5456656c      katty@mail.com  Katty       Moon
user4       hhhh8737y4434   katty@mail.com  Katty       Moon

三张桌子连在一起

UserName    Password        Email           firstname   surname
---------------------------------------------------------------
user1       jhwe7y784       john@mail.com   John        Smith
user2       srce45          bob@mail.com    Bob         Rolan
user3       4c5456656c      katty@mail.com  Katty       Moon
user4       hhhh8737y4434   katty@mail.com  Katty       Moon

结论

在我看来,Firstname和Lastname字段必须是tbl_Contacts表的一部分,但无论如何它只是可能解决方案的简化版本


话筒

enter image description here