我正在尝试将旧数据库中的数据复制到新数据库中,并将其转换为遵循新的数据库结构。旧的看起来像这样:
表1:
Id | Col A
----------
1 0
2 8
3 7
4 1
在新数据库中,表1现在看起来像这样,其中来自col A的数据现在在另一个表中,并且它通过A_Id外键列链接回表1:
表1:
Id | A_Id_FK
----------
1 0
2 1
3 2
4 3
表2:
Id | Col A
----------
0 0
1 8
2 7
3 1
所以......我的SQL技能非常生疏。我需要一次(读取:速度无关紧要)查询创建表2记录,同时将它们链接到表1记录。另一点需要提及的是我有两个数据库。一个是表1的旧表,另一个是表2的新表,表1表示除了A_Id_FK之外的所有其他信息,现在它只链接到表2中的空记录对于每条记录。
提前致谢。
编辑 - 为了更加清晰,新数据库中的表2为空。旧数据库中的Col A不是一个唯一的数字(事实上,它根本不是一个数字,但它只是为了简单起见)。填充新数据库中的表1,但是对于具有有效外键的所有内容,A_Id_FK中的值都设置为1。最后,即使是相同的Col A记录也需要在新数据库中拥有自己的实例。
答案 0 :(得分:2)
您可以使用CURSOR(Table_2.id是标识):
DECLARE @id INT
DECLARE @col_a VARCHAR(50)
DECLARE db_cursor CURSOR FOR
SELECT id, col_a
FROM Table_Source
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @id, @col_a
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO Table_2 (col_a) VALUES (@col_a)
INSERT INTO Table_1 (id, fk) VALUES (@id, @@IDENTITY)
FETCH NEXT FROM db_cursor INTO @id, @col_a
END
CLOSE db_cursor
DEALLOCATE db_cursor
答案 1 :(得分:0)
假设数据库“Old”和“New”具有上述表结构,假设两个数据库都存在于同一个SQL实例中,假设Old Table1中的每个“ColA”值都出现在New Table2中,并假设你是第一次加载数据,一个版本是:
INSERT New.dbo.Table1 (Id, A_Id_FK)
select Old.Id, New2.Id
from Old.dbo.Table1 Old
inner join New.dbo.Table2 New2
on New2.ColA = Old.ColA
听起来你可能已经填充了New..Table1?如果是这样,您需要某种更新语句将该表与Old..Table1和New..Table2相链接。
答案 2 :(得分:0)
我假设Table2中的Id是下面代码中的标识。
insert into Table2
(ColA)
select distinct ColA
from OldTable1
insert into Table1
(Id, A_Id_FK)
select ot.Id, t2.Id
from OldTable1 ot
inner join Table2 t2
on ot.ColA = t2.ColA