2012-07-09 60 views
-1

我有兩個表tab1tab2(具有相同的模式)駐留在不同的數據庫中。 這些表格的主鍵列aud_ID的值可能相似。合併SQL Server 2008中的兩個表,同時重新編號主鍵列值

請注意主鍵列aud_ID不是標識列。

我有任務合併第三個表tab3(具有相同的模式)中的兩個表的數據。 這裏面臨的挑戰是對主鍵列值tab3重新編號。

  1. 要麼的tab1主鍵列將首先被拷貝到tab3然後tab2數據將被插入到tab3開始的tab1.aud_id最大值。

    OR

  2. 主鍵列aud_id從1

任何想法重新編號,如何實現這一目標?

問候, PRASHANT ..

+0

你不在乎任何'aud_ID'值保持?如果沒有,那麼你可以重新編號所有行?如果是這樣,那麼解決方案很簡單... – 2012-07-09 13:25:29

+0

當然,如果主鍵被其他表中設置的任何外鍵引用,問題會稍微複雜一些... – 2012-07-09 13:38:27

+0

@PhilipKelley我必須假設自從OP扔掉tab2中的現有值,表示沒有任何關係需要維護。 – 2012-07-09 13:39:17

回答

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 

這樣的話,你能保證產生獨特的價值,而不必檢查任何一張桌子。通過保持公式化,如果需要,可以使用它複製其他表的引用。

+0

謝謝@Damien您的建議... – Prashant 2012-07-09 14:07:23

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; 
+0

謝謝@Aron ...這是有道理的...任何建議,如果我必須保持aud_id值的tab1然後重新編號爲tab2從tab1的最大值開始? – Prashant 2012-07-09 14:02:17

+0

你忘記'INTO'就在'INSERT'之後? – Bellash 2013-11-28 20:37:26

+1

@Bellash不,我沒有忘記它。 INTO是可選的,並且不會造成混淆或模棱兩可。你還會插入什麼?在......之外?旁?附近? – 2013-11-28 22:57:45

相關問題