
SQL Serverでテーブルのデータをコピーする方法
SQL Serverを使っていると、別のテーブルからデータのコピーや更新をする時にデータのバックアップを取りたいということがあります。
すでにバックアップ用のテーブルが存在している場合は容易にコピーすることができます。ここでは、SQL Serverでテーブルのデータを別のテーブルにコピーする方法を紹介します。
- SE
- SQL Serverで別のテーブルからデータをコピーしたくて、どうやったらできるのでしょうか?
- PL
- すでにテーブルにデータが存在していればコピーすることは容易です。方法を一緒に確認しましょう!
目次
SQL Serverのテーブルの作成とコピー元データの作成
ここでは、ユーザーテーブルでユーザーの情報を管理しているテーブルがあり、ユーザー情報を更新する際に、データのバックアップを別のテーブルに取るという例を考えてみます。
まず、SQL Serverでコピー元のデータを用意します。ユーザーテーブルには以下のカラムを用意します。
- ID
- 名前
- メールアドレス
テーブル作成のSQL文は以下の通りとします。
1 2 3 4 5 |
create table Users ( id int PRIMARY KEY, name nvarchar(50), email nvarchar(255) ) |
コピー元(ユーザーテーブル)にデータを作成します。
1 2 |
insert into Users(id, name, email) values(1, '山田太郎', 'taro.yamada@sample.jp') insert into Users(id, name, email) values(2, '山田花子', 'hanako.yamada@sample.jp') |
以下のようにデータが作成されます。
データの更新をした時に、ユーザー情報更新履歴テーブルにデータのバックアップを取るとします。
以下のようにコピー先(ユーザー情報更新履歴テーブル)のテーブルを作成します。
1 2 3 4 5 6 |
create table UserHistories ( id int PRIMARY KEY, user_id int, name nvarchar(50), email nvarchar(255) ) |
Usersテーブルと同じ項目で情報の履歴を管理できるようにテーブルを作成します。
SQL Serverでテーブルのデータをコピーする
データをコピーするには、select-insert文を使用します。
通常、データをテーブルに登録するにはinsert文を使用しますが、insert文が対象のカラムと対象のデータを指定して登録するのに対し、insert-select文は、テーブルからselectした結果を使用してデータを作成する構文です。
先ほど、コピー元のデータを作成する際に、以下のようにinsert文を使用しました。
1 2 |
insert into Users(id, name, email) values(1, '山田太郎', 'taro.yamada@sample.jp') insert into Users(id, name, email) values(2, '山田花子', 'hanako.yamada@sample.jp') |
コピーする場合は以下のようにinsert文が変わります。
1 2 3 |
insert into UserHistories(id, user_id, name, email) select '1', id, name, email from Users where id = 2 |
まず、前半のinsert部分は先ほどと同様で、登録するテーブルとカラムを指定します。
1 |
insert into UserHistories(id, user_id, name, email) |
後半部分で登録するデータを指定しますが、ここでselect文を使用します。
2 3 |
select '1', id, name, email from Users where id = 2 |
select文を使用することで、コピー元(Users)テーブルのデータをコピーしてコピー先(UserHistories)テーブルに登録することができます。
以下のようにデータがコピーされます。
- SE
- selectした結果をそのまま登録できるのですね。
- PL
- そうですね。selectした結果をinsertできるので、テーブル間のデータコピーも簡単です。
selectした結果をinsertすることでデータのコピーができる
値を指定してinsertするのではなく、selectした結果をinsertする方法でデータのコピーを行うことができます。
データのコピーは様々な用途に使用できます。selectした結果をコピーする方法は簡単なので使用してみてはいかがでしょうか。