將資料移動到表中(假設使用唯一鍵方法)

移動資料,首先將其插入目標,然後刪除從源表中插入的任何內容。這不是正常的 SQL 操作,但它可能具有啟發性

你插入了什麼?通常在資料庫中,你需要有一個或多個列,你可以使用這些列來唯一標識行,以便我們假設並使用它。

此語句選擇一些行

SELECT Key1, Key2, Column3, Column4 FROM MyTable;

首先,我們將這些插入到目標表中:

INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;

現在假設兩個表中的記錄在 Key1Key2是唯一的,我們可以使用它來查詢和刪除源表中的資料

DELETE MyTable
WHERE EXISTS (
    SELECT * FROM TargetTable 
    WHERE TargetTable.Key1 = SourceTable.Key1
    AND TargetTable.Key2 = SourceTable.Key2
);

只有 Key1Key2 在兩個表中都是唯一的,這才能正常工作

最後,我們不希望這項工作完成一半。如果我們將它包裝在一個事務中,那麼所有資料都將被移動,或者什麼都不會發生。這確保我們不插入資料,然後發現自己無法從源中刪除資料。

BEGIN TRAN;

INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;

DELETE MyTable
WHERE EXISTS (
    SELECT * FROM TargetTable 
    WHERE TargetTable.Key1 = SourceTable.Key1
    AND TargetTable.Key2 = SourceTable.Key2
);

COMMIT TRAN;