同时插入和更新两个表

时间:2018-11-13 03:08:30

标签: sql-server sql-server-2012

我正在两个数据库之间传输数据。

我的旧数据库有一个名为Customers的表,并且其中有一个名为Email的列。

我的新数据库有一个名为Account的新表,该表与旧的Customers表有关系。

因此,我想将所有客户从旧数据库转移到新数据库。将电子邮件与该表分开,然后插入到新表中。示例:

我的旧数据库表称为Customers

ID, Email, First Name, Last Name

我的新数据库表名为Customers

ID, Account ID, First Name, Last Name

我的新数据库表名为Account

ID, Email, Password

我已经将Customers转移到我的新数据库中,并将所有来自客户的Emails插入到Account表中。

但是现在,我想从新的Customers表中更新“帐户ID”列,以将所有客户与其帐户相关联。

INSERT INTO dbo.Account (Email)
    SELECT a.EmailAddress
    FROM AdventureWorks_Test.dbo.Customer a

我该怎么做?

谢谢。

1 个答案:

答案 0 :(得分:2)

这里最好的方法是保留ID供以后映射。您可以为此使用临时表。

CREATE TABLE #MigrationMapper
(   OldId INT,
    NewId INT )

然后,您可以在将数据插入新表时填充该表。您可以使用OUTPUT子句来获取插入的ID

MERGE INTO Account AS T 
USING AdventureWorks_Test.dbo.Customer s
ON t.Id=a.Id+ NULL --To insert all records 
WHEN NOT MATCHED THEN 
INSERT ( Email)
VALUES ( s.EmailAddress)
OUTPUT s.Id, INSERTED.ID INTO #MigrationMapper(OldId,NewId); 

因此,通过现在加入临时表,您知道哪个电子邮件地址与新客户行一起出现