Sql 在不同数据库中合并具有相同名称和架构的表

Sql 在不同数据库中合并具有相同名称和架构的表,sql,sql-server,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中新添加的任何行都应该进入prod,而不会干扰已经存在的任何行。在MS SQL server 2005/08中是否有这样做的方法 假设您只对新行感兴趣

我在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中新添加的任何行都应该进入prod,而不会干扰已经存在的任何行。在MS SQL server 2005/08中是否有这样做的方法

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

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
  );
如果存在此列,您还可以按日期/时间限制
选择

如果表中有一个标识列,并且您需要维护这些值,并且假设生产中没有插入新行,则可以说:

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;

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

Aaron,非常感谢。即使这些表有一个自动递增/自动生成的主键,这种方法也有效吗?@Sai您需要原始值保持不变,还是只需要新行在生产中获得一些标识值?如果是前者,如果同时在生产中插入新行,而不对数据进行一些真正创造性的处理,这可能是不可能的。在生产中我需要一些身份价值,而不是在UAT中完全相同的身份价值。您已经在自己的回复中解决了我的问题:)我很幸运,它不是前者,因为我们一直在向prod添加其他行。非常感谢您的详细回复:)而且,这些不是实际的表名。