将数据移动到表中(假设使用唯一键方法)
要移动数据,首先将其插入目标,然后删除从源表中插入的任何内容。这不是正常的 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;