合并SQL Server 2008中的两个表,同时重新编号主键列值
问题描述:
我有两个表tab1
和tab2
(具有相同的模式)驻留在不同的数据库中。 这些表格的主键列aud_ID
的值可能相似。合并SQL Server 2008中的两个表,同时重新编号主键列值
请注意主键列aud_ID
不是标识列。
我有任务合并第三个表tab3
(具有相同的模式)中的两个表的数据。 这里面临的挑战是对主键列值tab3
重新编号。
-
要么的
tab1
主键列将首先被拷贝到tab3
然后tab2
数据将被插入到tab3
开始的tab1.aud_id
最大值。OR
主键列
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
这样的话,你能保证产生独特的价值,而不必检查任何一张桌子。通过保持公式化,如果需要,可以使用它复制其他表的引用。
+0
谢谢@Damien您的建议... – Prashant 2012-07-09 14:07:23
答
假设你没有需要保留现有的任何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;
你不在乎任何'aud_ID'值保持?如果没有,那么你可以重新编号所有行?如果是这样,那么解决方案很简单... – 2012-07-09 13:25:29
当然,如果主键被其他表中设置的任何外键引用,问题会稍微复杂一些... – 2012-07-09 13:38:27
@PhilipKelley我必须假设自从OP扔掉tab2中的现有值,表示没有任何关系需要维护。 – 2012-07-09 13:39:17