我有两个表tab1
和tab2
(具有相同的架构),它们位于不同的数据库中。
这些表有一个主键列aud_ID
,其值可能相似。
请注意,主键列aud_ID
不是标识列。
我有任务要合并第三个表tab3
中的两个表的数据(具有相同的模式)。
这里的挑战是重新编号tab3
的主键列值。
将tab1
的主键列首先复制到tab3
,然后将tab2
数据插入tab3
,以tab1.aud_id
的最大值开始1}}。
OR
主键列aud_id
从1重新编号。
知道如何实现这个目标吗?
此致 PRASHANT ..
答案 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;