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」と記載することで、全ての条件を否定(常に偽となる条件)ということになるので、構造のみコピーされます。いわゆる、テーブルのヘッダーのみコピーするというやつです。