2016-12-05 64 views
1

我有两个数据库,testFromtestTo。他们的目的是从testFrom中取出选择列的值,并覆盖testTo中的那些相同列。两个数据库都处理同名的表格dbo.People。这两个数据库没有相同的记录数,因此传输不会为1:1。因此,我正在处理一个查询,该查询更新存在的行的值,并为那些不存在的行插入剩余的数据。当它们不为空时更新列,当它们为空时插入

目前我的更新工作,但插入将使用空值而不是从testFrom的值添加新行。我不确定我哪里错了,是否可以成为我插入的加入声明?

UPDATE to_p 
    SET to_p.DottedID = from_p.DottedID, to_p.Name = from_p.Name, to_p.Colour = from_p.Colour, to_p.Food = from_p.Food 
    FROM testFrom.dbo.people to_p left join testTo.dbo.People from_p on to_p.Name = from_p.Name 
    WHERE from_p.Name IS NOT NULL; 
INSERT INTO testTo.dbo.People (to_p.DottedID, to_p.Name, to_p.Colour, to_p.Food) 
    SELECT from_p.DottedID, from_p.Name, from_p.Colour, from_p.Food 
    FROM testFrom.dbo.people to_p left join testTo.dbo.People from_p on to_p.Name = from_p.Name 
    WHERE from_p.Name IS NULL; 

的输出如下

enter image description here

回答

1

你从错误表中选择列。改变你的INSERT语句像下面

INSERT INTO testTo.dbo.People (DottedID, Name, Colour, Food) 
    SELECT to_p.DottedID, to_p.Name, to_p.Colour, to_p.Food 
    FROM testFrom.dbo.people to_p left join testTo.dbo.People from_p 
    on to_p.Name = from_p.Name 
    WHERE from_p.Name IS NULL; 
+0

它说0行受到影响时,我建议你更改后执行 – BlueBarren

+0

@BlueBarren,是听错了。如果有帮助,请参阅编辑答案。 – Rahul

+0

是的,或多或少的作品谢谢。现在,我只是每个旧的条目仍然在那里,虽然 – BlueBarren

相关问题