【SQL】膨大なINSERT文をとにかく楽して生成したい - Qiitaはじめに検証の際などボリューミーなデータが必要になると、作るのにかなり億劫ですよね今回は、Excel(+メモ帳)を使用して膨大なINSERT文を生成する方法をご紹介します。こちらは"MySQL…
はじめに
検証の際などボリューミーなデータが必要になると、作るのにかなり億劫ですよね
今回は、Excel(+メモ帳)を使用して膨大なINSERT文を生成する方法をご紹介します。
こちらは”MySQL“を想定しております。
他データベースと異なる点に関しましては、適宜修正してください。
INSERT文とは
SQLの知見があまりない方向けにご説明しておくと、INSERTは”該当テーブルにデータを投入するSQL文“です。
INSERT INTO スキーマ名.テーブル名 (`カラム名1`, `カラム名2`, `カラム名3`) VALUES ('値1', '値2', '値3');
これで1レコード(行)分です。
数レコードならデータベース上で手打ちでも問題ないのですが、何万レコードとなると発狂します。
腱鞘炎になっちゃう。。業務とはいえ、たまに投げ出したくなる
INSERT文の生成方法
ここからが本題です。
何万レコードを手打ちはさすがに現実的ではないので、私はExcelとメモ帳を駆使しINSERT文を作っています。
■ Excel
まずはINSERT文生成用のExcelフォーマットを用意する必要があるので、構成からご説明いたします。
▼ 全体
スキーマ名.テーブル名、カラム名を関数で取得し、INSERT文に自動反映されるようにしています。
▼ 値を直接入力
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の値をそのままデータベース上にコピペするだけでは構文が不十分なので、メモ帳で置換する工程を挟みます。
▼ メモ帳に値を貼り付け
▼ 正規表現に☑を入れて、以下を置換
置換前:¥t ※”¥t”という文字列ではなくtabキーでできた空欄
置換後:','
▼ 正規表現に☑を外して、以下を置換
置換前:('',
置換後:(
置換完了後、メモ帳の値をすべてデータベース上に貼り付けると、実行できる状態になります。
データベース上に、データが正常に投入されました!
最後に
今回は、膨大なINSERT文を楽して生成する方法をご紹介いたしました。
今後暇を見つけて、もっと効率的かつやりやすい方法を実践してみようと思います。(おそらく先は長い。。)
最後までお読みいただき、ありがとうございました