サーチ…


あるテーブルから別のテーブルにデータをコピーする

このコードは、テーブルからデータを選択し、クエリツール(通常はSSMS)に表示します。

SELECT Column1, Column2, Column3 FROM MySourceTable;

このコードは、そのデータをテーブルに挿入します。

INSERT INTO MyTargetTable (Column1, Column2, Column3)
SELECT Column1, Column2, Column3 FROM MySourceTable;

データをテーブルにコピーし、そのテーブルをオンザフライで作成する

このコードは、テーブルからデータを選択します。

SELECT Column1, Column2, Column3 FROM MySourceTable;

このコードは、 MyNewTableという新しいテーブルを作成し、そのテーブルにそのデータを格納します。

SELECT Column1, Column2, Column3 
INTO MyNewTable
FROM MySourceTable;

データをテーブルに移動する(ユニークキー方式を想定)

データを移動するには、最初にターゲットに挿入してから、ソース表から挿入したものを削除します。これは通常のSQL操作ではありませんが、啓蒙されている可能性があります

あなたは何を挿入しましたか?通常、データベースでは、行を一意に識別するために使用できる1つ以上の列を持つ必要があります。そこで、その行を想定して使用します。

この文は、いくつかの行を選択します

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;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow