将数据移动到表中(假设使用唯一键方法)

移动数据,首先将其插入目标,然后删除从源表中插入的任何内容。这不是正常的 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;