#author("2023-10-20T20:14:47+09:00","","")
#author("2023-10-20T20:17:48+09:00","","")
#navi(../)
* SQL Serverでテーブルをコピー(複製)する SELECT INTO ステートメント [#aeaf4f38]
動作確認する前のバックアップなどで「このテーブルのコピー(複製)を作りたい」など~
SQL Server では SELECT INTO で簡単に複製(コピー)を作成できます。~
以下、実際に SELECT INTO ステートメントを使った使用例を記します。

#contents

* 動作確認環境 [#p2270648]
- SQL Server~
 SELECT @@VERSION
 Microsoft SQL Server 2019 (RTM-GDR) <snip>
- SQL Server Management Studio v18.12.1

* SELECT INTO で複製をつくる構文 [#hc465412]
SELECT * INTO ステートメントでテーブルの複製を作成するステートメントは以下の通りです。
 SELECT * INTO [複製で作成するテーブル名] FROM [複製したいテーブル名];
 SELECT * INTO [複製で作成するテーブル名] FROM [複製したいテーブル名]

以下、実際に複製元のテーブルを作り、データを投入し SELECT * INTO ステートメントを使って複製を作ってみます。

** 複製元テーブルの作成 [#j727ee62]
以下、DDLでテーブルを作成しました。

 CREATE TABLE SRC_TBL (
   PRODUCT_CODE VARCHAR(10) PRIMARY KEY,
   PRODUCT_NAME VARCHAR(100) NOT NULL,
   PRODUCT_PRICE FLOAT NOT NULL,
   CREATE_DATE DATETIME NOT NULL,
   UPDATE_DATE DATETIME
 )

** データの投入 [#gbec76aa]
以下のINSERT文で SRC_TBLにレコードを投入しました。

 INSERT INTO SRC_TBL VALUES 
 ('msw01','Windows10',14350,CURRENT_TIMESTAMP,NULL),
 ('msw02','Windows12',15700,CURRENT_TIMESTAMP,NULL),
 ('lnx01','Debian',0,CURRENT_TIMESTAMP,NULL),
 ('lnx02','Arch Linux',0,CURRENT_TIMESTAMP,NULL),
 ('bsd01','FreeBSD',0,CURRENT_TIMESTAMP,NULL),
 ('bsd02','OpenBSD',0,CURRENT_TIMESTAMP,NULL)

** 投入データ確認 [#q5a83cd5]
上記 INSERT SQL 実行後、複製元である SRC_TBL を確認しました。

#ref(01.png)

** テーブルを複製する [#md195e32]
以下の SELECT * INTO で SRC_TBL を DEST_TBL というテーブル名で複製を作成します。 
 SELECT * INTO DEST_TBL FROM SRC_TBL

** テーブルの複製確認 [#e81b9814]
以下、SELECTでテーブル内レコードの確認と EXCEPT をつかって差分確認を行いました。~
複製されているのが確認できます。

#ref(02.png)
#br

以上、SQL Server で SELECT * INTO 構文を使ってテーブルの複製を作成する手順でした。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS