我正在尝试将表从旧数据库(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_ID
和User_ID
。
我确信这一定是可能的,但我不知道从哪里开始。我有大约900个用户导入到新的CMS,这可以用SQL完成吗?也许是一个存储过程或者最好是创建一个.net脚本?
这将是一次性导入,因为一旦完成,管理员将向用户添加已内置于CMS的'add user'
功能。
如有任何问题,请询问。
提前致谢。
答案 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表的一部分,但无论如何它只是可能解决方案的简化版本