記事内に広告が含まれています。

【SQL Server】テーブルのデータをコピーする

SQL Server における、テーブルのデータをコピーする方法です。

【スポンサーリンク】

SQL Server でテーブルのデータをコピーする

SQL Server でテーブルのデータをコピーするSQL文は2つあります。

  • SELECT INTO ~を使う
  • INSERT INTO ~を使う

どちらでも結果は同じです。サンプルの構文は以下。

--SELECT INTO を使用したテーブルのデータコピー
SELECT * INTO 新しいテーブル名
  FROM 元のテーブル名;

--INSERT INTO を使用したテーブルのデータコピー
INSERT INTO 新しいテーブル名 (列1, 列2, 列3, ...)
SELECT 列1, 列2, 列3, ...
  FROM 元のテーブル名;

状況に応じて使い分けて下さい。

【スポンサーリンク】

実行例

では実際に実行してみます。サンプルのテーブルを用意しましたので、試しに実行してみて下さい。

--テスト用テーブルCREATE文
CREATE TABLE WeekDays (
    DayOfWeekCD char(2),
    DayOfWeekName nvarchar(10)
);

--テスト用テーブルデータINSERT文
INSERT INTO WeekDays (DayOfWeekCD, DayOfWeekName)
VALUES
    ('01', N'Sunday'),
    ('02', N'Monday'),
    ('03', N'Tuesday'),
    ('04', N'Wednesday'),
    ('05', N'Thursday'),
    ('06', N'Friday'),
    ('07', N'Saturday');

SELECT * FROM WeekDays

上記を実行すると、以下になります。

テスト用データ確認(コピー元テーブル)

で、これをコピーするSQLは以下。コピー元テーブルは「WeekDays」で、コピー先テーブルを「WeekDays_Copy」とします。

--SELECT INTO のパターン
SELECT *
  INTO WeekDays_Copy --コピー先テーブル名
  FROM WeekDays;

--INSERT INTO のパターン
INSERT INTO WeekDays_Copy (DayOfWeekCD, DayOfWeekName) --コピー先テーブル名
SELECT DayOfWeekCD, DayOfWeekName
  FROM WeekDays;

どちらでも大丈夫なのですが、今回は「SELECT INTO ~」のパターンで実行してみます。

コピー用クエリ実行

実行結果確認

ちゃんとコピーされてますね。

【スポンサーリンク】

テーブルの構造のみコピー(データ無しコピー)する方法

「データは不要だから、テーブルの構造だけコピーしたい」という場合は、次の様に記載します。

-- テーブルの構造だけをコピーする
SELECT *
  INTO 新しいテーブル
  FROM 元のテーブル
 WHERE 1 = 0;

WHERE句に「1 = 0」と記載することで、全ての条件を否定(常に偽となる条件)ということになるので、構造のみコピーされます。いわゆる、テーブルのヘッダーのみコピーするというやつです。