SQL

【SQL】膨大なINSERT文をとにかく楽して生成したい

job_illustrator_pc_woman-e SQL
【SQL】膨大なINSERT文をとにかく楽して生成したい - Qiita
はじめに検証の際などボリューミーなデータが必要になると、作るのにかなり億劫ですよね今回は、Excel(+メモ帳)を使用して膨大なINSERT文を生成する方法をご紹介します。こちらは"MySQL…

はじめに

検証の際などボリューミーなデータが必要になると、作るのにかなり億劫ですよね:rolling_eyes:

今回は、Excel(+メモ帳)を使用して膨大なINSERT文を生成する方法をご紹介します。

こちらは”MySQL“を想定しております。
他データベースと異なる点に関しましては、適宜修正してください。

INSERT文とは

SQLの知見があまりない方向けにご説明しておくと、INSERTは”該当テーブルにデータを投入するSQL文“です。

INSERT INTO スキーマ名.テーブル名 (`カラム名1`, `カラム名2`, `カラム名3`) VALUES ('値1', '値2', '値3');

これで1レコード(行)分です。
数レコードならデータベース上で手打ちでも問題ないのですが、何万レコードとなると発狂します。
腱鞘炎になっちゃう。。業務とはいえ、たまに投げ出したくなる

INSERT文の生成方法

ここからが本題です。
何万レコードを手打ちはさすがに現実的ではないので、私はExcelとメモ帳を駆使しINSERT文を作っています。

■ Excel

まずはINSERT文生成用のExcelフォーマットを用意する必要があるので、構成からご説明いたします。

▼ 全体

スキーマ名.テーブル名、カラム名を関数で取得し、INSERT文に自動反映されるようにしています。

Excel


▼ 値を直接入力

F8~H10

▼ スキーマ名.テーブル名、カラム名を取得

C2:スキーマ名
C3:テーブル名
C4:=C2&"."&C3

F7~:カラム名

▼ INSERT文に各カラム名を取得

E列:

="INSERT INTO "&$C$4&" (`"&$F$7&"`,`"&$G$7&"`,`"&$H$7&"`)VALUES('"

▼ 最後の値に閉じ括弧+αを付与

2レコード目以降は1レコード目の値をコピペ
B列:=H8 ※最後のカラム列
C列:');
D列:=B8&C8

D列の値を最後の列(H列)に値貼り付け
※B列、D列の関数に変な値が反映されてしまっていますが、以降の工程には影響しないので問題ないです。

Excel


■ メモ帳 ※サクラエディタ推奨

Excelの値をそのままデータベース上にコピペするだけでは構文が不十分なので、メモ帳で置換する工程を挟みます。

▼ メモ帳に値を貼り付け

メモ帳

E8からH10をコピーして貼り付け

▼ 正規表現に☑を入れて、以下を置換

置換前:¥t ※”¥t”という文字列ではなくtabキーでできた空欄
置換後:','

▼ 正規表現に☑を外して、以下を置換

置換前:('',
置換後:(

置換完了後、メモ帳の値をすべてデータベース上に貼り付けると、実行できる状態になります。

メモ帳


データベース上に、データが正常に投入されました!

正規表現に☑を入れて、以下を置換


最後に

今回は、膨大なINSERT文を楽して生成する方法をご紹介いたしました。
今後暇を見つけて、もっと効率的かつやりやすい方法を実践してみようと思います。(おそらく先は長い。。)

最後までお読みいただき、ありがとうございました:information_desk_person_tone1:

タイトルとURLをコピーしました