我们有一个旧数据库,我们维护一个新数据库,并且已经开始使用一个新数据库。我们需要定期将数据从旧数据库传输到新数据库。目前,我们需要传输或合并,因为它也可能被称为数据从一张表中 - 学生,旧数据库中的两张表格(即两个目标)在新的一个 - 人和学生。现在的问题是,来自旧的源数据库的数据应该在新数据库中的两个表中进行分配。例如(只是为了这个帖子的缘故),SQL将源表中的n行合并到两个目标
旧表 '学生'
------------------------------
IdNo | FirstName | LastName |
578 | John | Doe |
645 | Sara | Doe |
新表 '人'
-----------
Id | IdNo |
11 | 578 |
23 | 645 |
新表 '学生'
--------------------------------------
Id | PersonId | FirstName | LastName |
101| 11 | John | Doe |
102| 23 | Sara | Doe |
并且该过程应该采用要合并的行数的参数。
这怎么能完成?
更新
,也许会更容易让你们知道我的伪代码的含义是:
MERGE [NewDB].[dbo].[Person] p, [NewDB].[dbo].[Student] ns -- 2 targets, this does not work
USING [OldDB].[dbo].[student] os -- source table, old student
ON p.IdNo = s.IdNo
WHEN MATCHED THEN -- Update existing rows
UPDATE p
SET p.SomeCoumn1 = os.SomeColumn1 -- works. os (old student) is know here
UPDATE ns
SET ns.SomeColumn2 = os.SomeColumn2 -- Does not work. os is not known here
WHEN NOT MATCHED BY TARGET THEN -- Add new rows
INSERT INTO p (IdNo, SomeOlumn1)
VALUES (os.Idno, os.SomeColumn1); -- os (old Studnet) is known here
INSERT INTO ns (SomeColumn2)
VALUES (os.SomeColumn2); -- Does not work. os is not knwon here
我希望这使得它更为清楚。
你到目前为止尝试了什么? –
哪里来的人物? –
为什么不把名字和姓氏放在新人表中呢? – jarlh