Sql server 2008 合并SQL Server 2008中的两个表,同时对主键列值重新编号

Sql server 2008 合并SQL Server 2008中的两个表,同时对主键列值重新编号,sql-server-2008,merge,Sql Server 2008,Merge,我有两个表tab1和tab2,它们具有相同的模式,驻留在不同的数据库中。 这些表有一个主键列aud_ID,其值可以相似 请注意,主键列aud_ID不是标识列 我的任务是将两个表的数据合并到具有相同模式的第三个表tab3中。 这里的挑战是重新编号tab3的主键列值 首先将tab1的主键列复制到tab3中,然后从tab1.aud_id的最大值开始将tab2数据插入到tab3中 或 主键列aud_id从1重新编号 你知道如何做到这一点吗 问候,, Prashant.如果aud_id值是数字,并且您不需

我有两个表tab1和tab2,它们具有相同的模式,驻留在不同的数据库中。 这些表有一个主键列aud_ID,其值可以相似

请注意,主键列aud_ID不是标识列

我的任务是将两个表的数据合并到具有相同模式的第三个表tab3中。 这里的挑战是重新编号tab3的主键列值

首先将tab1的主键列复制到tab3中,然后从tab1.aud_id的最大值开始将tab2数据插入到tab3中

主键列aud_id从1重新编号

你知道如何做到这一点吗

问候,, Prashant.

如果aud_id值是数字,并且您不需要避免间隙,您可以执行以下操作:

insert into tab3 (/* Columns */)
select (aud_id *2)-1,/* Other Columns */ from tab1
union all
select (aud_id *2),/* Other Columns */ from tab2

这样,您可以保证生成唯一的值,而不必检查任何一个表。通过保持公式化,如果需要,您可以使用它从其他表复制引用。

假设您不需要保留任何现有的aud_ID值:


您是否关心是否保留任何aud_ID值?如果没有,那么您可以将所有行重新编号吗?如果是这样,那么解决方案就相当简单了……当然,如果主键被其他表中设置的任何外键引用,问题变得稍微复杂一些…@PhilipKelley我不得不假设,因为OP正在丢弃tab2中的现有值,所以没有任何关系需要维护。@PhilipKelley主键没有引用到任何其他表。@Aron…这很有意义…如果我必须保留tab1和tab2的aud_id值,有什么建议吗然后从tab1的最大值开始为tab2重新编号?你是不是在插入后忘记了插入??@Bellash不,我没有忘记。进入是可选的,离开它不会引起混乱或歧义。你还想怎么插入?出了什么事?在旁边附近的
INSERT dbo.tab3(aud_ID, other cols)
SELECT aud_ID = ROW_NUMBER() OVER (ORDER BY aud_ID), other cols
FROM
(
  SELECT aud_ID, other cols FROM dbo.tab1
  UNION ALL
  SELECT aud_ID, other cols FROM dbo.tab2
) AS x;