データパッチ作成
【まとめ記事】
作業効率化まとめ
SQLのUPDATE文を作成するツール
基本的には以下の3ステップ
- 1.パッチ対象となる条件
- 2.パッチするデータの用意
- 3.UPDATE文生成
1.パッチ対象となる条件
どのレコードのどのカラムにパッチをあてるのか
例えばカラム「name」に文字列「patch」を含むことが条件の場合
WHERE name LIKE '%patch%'
となるわけで
すなわち、最終的に生成されるUPDATE文のWHERE句となる
この条件まちがえたら大変なことになるから慎重に
2.更新データの用意
パッチをあてたのちに置き換わる値を用意
よくやるのがkitting
という文字列への更新
条件によって更新データも変わる場合はより煩雑になる
- カラム「id」が奇数の場合は「odd」
- 偶数の場合は「even」に変える
となった場合は、1で作成したパッチ対象条件にも追記が必要となる
-- 「odd」に変更する条件
WHERE MOD(id, 2) = 1 AND name LIKE '%patch%'
-- 「even」に変更する条件
WHERE MOD(id, 2) = 0 AND name LIKE '%patch%'
3.UPDATE文生成
1, 2を元にUPDATE文を生成
更新データが煩雑な場合はすでにクエリが完成しているが
UPDATE テーブル名 SET name = 'データ'
にWHERE句
を足す
-- 「odd」に変更する条件
UPDATE テーブル名 SET name = 'odd' WHERE MOD(id, 2) = 1 AND name LIKE '%patch%'
-- 「even」に変更する条件
UPDATE テーブル名 SET name = 'even' WHERE MOD(id, 2) = 0 AND name LIKE '%patch%'
本題) 煩雑な更新データの場合
やっかいなパターンが、カラムごとに更新データが異なる場合
もはやExcelなどで一つずつクエリを作成せざるを得ない
「id」+「name」に値を変える場合
| id| name| 更新データ| UPDATE句
| 0| aaaa| =$A2&$B2 | ="UPDATE テーブル名 SET name = '"&$C2&"' WHERE id = "&$A2&";"
.
.
.
これにより
更新データ:「0aaaa」
UPDATE句:「UPDATE テーブル名 SET name = '0aaaa' WHERE id = 0;」
「id」+「name」に値を変える場合
としたが、ここすらも更に面倒な場合がある
もはやSQLというよりExcelの戦い
忘れがちなのが
- 代入する値を
''
で囲うこと - 1クエリごとに
;
をつけること
※IN句などの場合はint型であろうとシングルクォートが必要
※複数行のUPDATE文を範囲選択してSQLを実行する場合を考慮している
なにより大事なのが、ツールによって生成する時点で、ツール作成
という開発を行っているわけで
必ず検証環境などでの商用類似レコードに対し、しっかりと動作確認を行うべきである
また、
SELECT COUNT(*) FROM テーブル名 WHERE パッチ対象条件
SELECT COUNT(*) FROM テーブル名 WHERE updated_time > '作業開始時間'
上記二つのカウント結果を取得することで、UPDATE件数が正常であることが確認できる