在重新编号主键列值时合并SQL Server 2008中的两个表

时间:2012-07-09 13:20:33

标签: sql-server-2008 merge

我有两个表tab1tab2(具有相同的架构),它们位于不同的数据库中。 这些表有一个主键列aud_ID,其值可能相似。

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

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

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

    OR

  2. 主键列aud_id从1重新编号。

  3. 知道如何实现这个目标吗?

    此致 PRASHANT ..

2 个答案:

答案 0 :(得分:2)

如果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

这样,您可以保证生成唯一值,而无需检查任何一个表。通过保持公式化,您可以根据需要使用它来复制其他表中的引用。

答案 1 :(得分:1)

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

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;