レコードに一意のIDを含むフィールドがある場合は、TableAからTableBに単純なINSERT
+を実行してから、挿入された元のレコードの単純な+を実行できます。SELECT
DELETE
たとえば、最初に選択基準に一致するすべてのレコードをTableBに挿入します。
INSERT INTO TableB (uniqueID, Field1, Field2, FieldN)
SELECT uniqueID,
Field1,
Field2,
FieldN
FROM TableA
WHERE FieldN = SomeCriteria
次に、削除するレコードを決定するための選択基準としてフィールドuniqueIDを使用して、tableBに挿入したばかりのすべてのレコードをTableAから削除します。
DELETE TableA
WHERE uniqueID IN (SELECT uniqueID
FROM TableB)
いくつかのエラーチェックを使用して両方のステートメントを1つのトランザクションに入れる場合、2つのステートメントの実行中に問題が発生した場合に備えて保護する必要があります。
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
TableAからレコードを選択するEXISTS
代わりに使用できる各レコードを一意に識別できる単一の列がない場合は、次のようにします。IN
DELETE
DELETE TableA
WHERE EXISTS (SELECT *
FROM TableB
WHERE TableA.field1 = TableB.field1
AND TableA.field2 = TableB.field2
AND TableA.FieldN = TableB.fieldn);