我在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中执行此操作?
答案 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;
如果在生产中插入了任何新行,那么您可能需要执行一些手动工作来解决任何冲突。