將資料移動到表中(假設使用唯一鍵方法)
要移動資料,首先將其插入目標,然後刪除從源表中插入的任何內容。這不是正常的 SQL 操作,但它可能具有啟發性
你插入了什麼?通常在資料庫中,你需要有一個或多個列,你可以使用這些列來唯一標識行,以便我們假設並使用它。
此語句選擇一些行
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
首先,我們將這些插入到目標表中:
INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
現在假設兩個表中的記錄在 Key1
,Key2
上是唯一的,我們可以使用它來查詢和刪除源表中的資料
DELETE MyTable
WHERE EXISTS (
SELECT * FROM TargetTable
WHERE TargetTable.Key1 = SourceTable.Key1
AND TargetTable.Key2 = SourceTable.Key2
);
只有 Key1
,Key2
在兩個表中都是唯一的,這才能正常工作
最後,我們不希望這項工作完成一半。如果我們將它包裝在一個事務中,那麼所有資料都將被移動,或者什麼都不會發生。這確保我們不插入資料,然後發現自己無法從源中刪除資料。
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;