SQL Serverでテーブルのデータをコピーする方法
SQL Serverを使っていると、別のテーブルからデータのコピーや更新をする時にデータのバックアップを取りたいということがあります。
すでにバックアップ用のテーブルが存在している場合は容易にコピーすることができます。ここでは、SQL Serverでテーブルのデータを別のテーブルにコピーする方法を紹介します。
- システム
エンジニア - SQL Serverで別のテーブルからデータをコピーしたくて、どうやったらできるのでしょうか?
- プロジェクト
リーダー - すでにテーブルにデータが存在していればコピーすることは容易です。方法を一緒に確認しましょう!
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)テーブルに登録することができます。
以下のようにデータがコピーされます。
- システム
エンジニア - selectした結果をそのまま登録できるのですね。
- プロジェクト
リーダー - そうですね。selectした結果をinsertできるので、テーブル間のデータコピーも簡単です。
selectした結果をinsertすることでデータのコピーができる
値を指定してinsertするのではなく、selectした結果をinsertする方法でデータのコピーを行うことができます。
データのコピーは様々な用途に使用できます。selectした結果をコピーする方法は簡単なので使用してみてはいかがでしょうか。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
SQLServer新着案件New Job
-
蔦屋書新店オープンに関するアプリ開発/Oracle/東京都渋谷区/【WEB面談可】/在宅勤務
月給56万~59万円東京都渋谷区(神泉駅) -
資産運用会社向け残高管理システム運用保守/SQLServer/東京都中央区/【WEB面談可】
月給50万~60万円東京都中央区(銀座駅) -
資産運用会社向け残高管理システム開発のテスター/SQLServer/東京都中央区/【WEB面談可】
月給25万~35万円東京都中央区(銀座駅) -
放射線部門システムパッケージの運用保守/Oracle/東京都港区/【WEB面談可】
月給50万~60万円東京都港区(品川駅) -
放射線部門システムパッケージの開発のテスター/Oracle/東京都港区/【WEB面談可】
月給25万~35万円東京都港区(品川駅) -
営業フロントシステム運用保守/ASP.NET/東京都江東区/【WEB面談可】
月給50万~60万円東京都江東区(木場駅)