在不同的数据库中合并具有相同名称和模式的表

时间:2014-01-28 15:14:05

标签: sql sql-server

我在UAT中使用以下架构

创建了这个表A.
A-UAT

Column 1,
Column 2,
Column 3

我在prod中使用相同的模式

A-Prod

Column 1,
Column 2,
Column 3

最近在UAT中添加了新行,当时UAT没有Prod表的所有记录。现在,我想将UAT中新添加的行与prod合并。也就是说,无论在UAT中新增加的是什么,都应该进行刺激而不会打扰已存在的任何东西。有没有办法在MS SQL Server 2005/08中执行此操作?

1 个答案:

答案 0 :(得分:1)

假设您只对新行感兴趣,而不是更新的行,并且您的表有主键:

INSERT dbo.[A-Prod](all cols except IDENTITY column) 
SELECT all cols except IDENTITY column FROM dbo.[A-UAT] AS x
  WHERE NOT EXISTS 
  (
    SELECT 1 FROM dbo.[A-Prod] 
    WHERE key = x.key
  );

如果此列存在,您还可以按日期/时间限制SELECT

如果该表具有IDENTITY列,并且您需要维护这些值,并假设没有在生产中插入新行,您可以说:

SET IDENTITY_INSERT dbo.[A-Prod] ON;

INSERT dbo.[A-Prod](all cols)
SELECT all cols FROM dbo.[A-UAT] AS x
  WHERE NOT EXISTS 
  (
    SELECT 1 FROM dbo.[A-Prod] 
    WHERE identity_column = x.identity_column
  );

SET IDENTITY_INSERT dbo.[A-Prod] OFF;

如果在生产中插入了任何新行,那么您可能需要执行一些手动工作来解决任何冲突。