2014-01-09 63 views
0

我試圖從TableA批量插入TableB,這將(如果我能得到它的工作)然後是一個大規模UPSERT的一部分在30/60分鐘週期使用2008R2 。SQL - 避免批處理插入重複主鍵

TableB有一個反對它的主鍵&一個唯一索引。

我不能丟棄&在int上重新創建IDENTITY,因爲所涉及的表是第三方應用程序的一部分&添加IDENTITY將導致應用程序出現問題。

我希望能夠走下使用MAX的路線(即使有可能帶來的問題,但總體來說,這應該不會導致很多問題,如果在環境中),但我遇到了問題使用下面的表格中的唯一索引;

DECLARE @V int 
SELECT @V = MAX(PRIMARY_KEY) from TABLEB 
INSERT INTO TABLEB ([PRIMARY_KEY],[COL1],[COL2],[COL3]) 
SELECT (ROW_NUMBER() OVER (ORDER BY COL1 ASC)) + @V As PRIMARY_KEY,COL1,COL2,COL3 
FROM TABLEA 

其他想法我是使用其舉行的最後一次使用int值的表,這將通過一個存儲過程&更新存儲過程的輸出將是下一個可用的....我不認爲這雖然考慮到了我實際上想要達到的目標,但它們還是可以工作的。

該計劃的最後一場比賽是在六個合併報表中包含所有(因爲這隻有大約1%),但是最初如果我至少能夠做到這一點,那將是一個開始。

任何意見或建議將是最受歡迎的。

感謝

鮑勃

+0

@AndriyM我沒有嘗試,但很長一段時間的瀏覽器第一次海報的情況下(與報名昨天下午),所以在某些時候不能提供答案,直到明天。感謝整潔,也不確定我第二次如何成功。 – IchBinDicky

回答

0

我已經解決了什麼竟然是一個小學生的錯誤,我忽略了/沒有發現關於這一點我想在當時是微不足道的另一列聚集索引。 ...我們住&學習。

因此,要澄清是否有人有興趣,下面的工作,因爲我預期增加了上面提到的專欄......在這個虛擬的情況下,它會是col4;

DECLARE @v int 
SELECT @v = MAX(PRIMARY_KEY) FROM TABLEB 
INSERT INTO TABLEB ([PRIMARY_KEY],[COL1],[COL2],[COL3],[COL4]) 
SELECT (ROW_NUMBER() OVER (ORDER BY [PRIMARY_KEY] ASC)) + @v ,COL1,COL2,COL3,COL4 
FROM TABLEA 

感謝

鮑勃