如果您的记录有一个包含唯一 ID 的字段,您可以从 TableA 到 TableB 执行一个简单的INSERT
+ SELECT
,然后DELETE
插入一个简单的原始记录。
例如,首先将所有符合您的选择条件的记录插入到 TableB 中:
INSERT INTO TableB (uniqueID, Field1, Field2, FieldN)
SELECT uniqueID,
Field1,
Field2,
FieldN
FROM TableA
WHERE FieldN = SomeCriteria
然后从 TableA 中删除您刚刚插入到 tableB 中的所有记录,使用字段 uniqueID 作为选择条件,以确定要删除哪些记录:
DELETE TableA
WHERE uniqueID IN (SELECT uniqueID
FROM TableB)
如果您将两个语句放在一个带有几个错误检查的事务中,您应该受到保护,以防两个语句执行时出现问题:
BEGIN TRANSACTION
INSERT INTO TableB (uniqueID, Field1, Field2, FieldN)
SELECT uniqueID,
Field1,
Field2,
FieldN
FROM TableA
WHERE FieldN = SomeCriteria;
IF @@ERROR <> 0 THEN
BEGIN
ROLLBACK TRANSACTION
RETURN (@@ERROR)
END
DELETE TableA
WHERE uniqueID IN (SELECT uniqueID
FROM TableB);
if @@ERROR <> 0 THEN
BEGIN
ROLLBACK TRANSACTION
RETURN (@@ERROR)
END
COMMIT TRANSACTION
如果您没有可以唯一标识您的每条记录的单个列,您可以使用它EXISTS
来代替从 TableAIN
中选择记录:DELETE
DELETE TableA
WHERE EXISTS (SELECT *
FROM TableB
WHERE TableA.field1 = TableB.field1
AND TableA.field2 = TableB.field2
AND TableA.FieldN = TableB.fieldn);