2010-07-08 34 views
0

我必須將數據從一個表合併到另一個表。這兩個表具有相同的結構,這樣的事情:將數據從一個表合併到FK中

Id (PK*) | Name | ParetnId (FK to PK*, it's a tree) 

我試圖使用方法:

  • 平原插入/更新 - 太長SQL,FK/PK的問題(當我複製一行的ParentId不存在行)
  • 合併運營商 - 要短得多,但同樣的問題

我知道有些人暫時關閉約束,複製數據並再次轉動約束。在我的情況下,我試圖避免這種情況。 (很多線程都在寫這些表格,我不知道這些技巧是如何影響交易的)

問題是:如何在不關閉約束的情況下合併(或複製)這些表格之間的記錄。

回答

0

我可以在源表上使用更多的信息。我假設它不會有主鍵列。如果它還沒有外鍵列,那麼我假設你可以加入到目標表中以獲取該id(如果是這樣,你可以從下面刪除AND EXISTS子句)。唯一的麻煩是,你將不得不運行幾次,直到沒有更多的插入。

MERGE INTO Target AS T 
    USING Source AS S 
    ON S.Name = T.Name 
    WHEN MATCHED AND EXISTS(
    SELECT * 
     FROM Target 
     WHERE Id = S.ParentID 
    ) THEN 
    UPDATE SET 
     ParentId = S.ParentID 
    WHEN NOT MATCHED BY TARGET AND EXISTS(
    SELECT * 
     FROM Target 
     WHERE Id = S.ParentID 
    ) THEN 
    INSERT VALUES(
     S.Name, 
     S.ParentID 
    ) 
相關問題