使用连接条件更新表

时间:2013-05-16 09:03:30

标签: sql-server tsql ssis

我有以下情况。

 Table A // Dev
 ID
 NAME
 Address

 Table A  // Prod
 ID
 NAME
 Address

从Dev中删除我需要检查它是否存在于prod中,如果确实存在,那么我需要从prod恢复它的值并删除Prod中不存在的所有值。这有什么SQL帮助吗?有人可以建议查询吗?

2 个答案:

答案 0 :(得分:1)

如果两个数据库位于同一个实例中,那么您可以尝试以下查询:

--update query
update d set d.name = p.name, d.address = p.address
from dev.dbo.tableA d 
        join prod.dbo.tableA p on d.id = p.id

--delete query
delete dev.dbo.tableA
where id not in (select id from prod.dbo.tableA)

答案 1 :(得分:1)

您应该使用Lookup

enter image description here

1.Source将是您的发展。

2.拖动查找并编写查询以从生产表中获取ID。从源代码中查找ID并在查找中生成并从生产中选择ID以及生产中的其他列

enter image description here

3.拖动OLedb命令并编写查询以更新dev

 update d set d.Col1 = ?, d.Col2 =?
  from dev.tableA d 
  where d.id = ?

4.Similary编写删除查询并映射从查找中选择的列

  delete from dev.tableA
  where id <> ?

注意:Oleb命令对每一行都执行。因此,如果你有太多行,它会很慢。如果性能是主要问题,那么您可以在查找到开发服务器中的表后转储所有数据,然后在执行SQL任务中使用Merge语法来执行更新和删除操作