LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

データパッチ作成ツール

Last updated at Posted at 2020-07-21

データパッチ作成

【まとめ記事】
作業効率化まとめ

SQLのUPDATE文を作成するツール
基本的には以下の3ステップ

  • 1.パッチ対象となる条件
  • 2.パッチするデータの用意
  • 3.UPDATE文生成

1.パッチ対象となる条件

どのレコードのどのカラムにパッチをあてるのか
例えばカラム「name」に文字列「patch」を含むことが条件の場合

example.sql
WHERE name LIKE '%patch%'

となるわけで
すなわち、最終的に生成されるUPDATE文のWHERE句となる
この条件まちがえたら大変なことになるから慎重に

2.更新データの用意

パッチをあてたのちに置き換わる値を用意
よくやるのがkittingという文字列への更新

条件によって更新データも変わる場合はより煩雑になる

  • カラム「id」が奇数の場合は「odd」
  • 偶数の場合は「even」に変える

となった場合は、1で作成したパッチ対象条件にも追記が必要となる

example.sql
-- 「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句を足す

example.sql
-- 「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を実行する場合を考慮している

なにより大事なのが、ツールによって生成する時点で、ツール作成という開発を行っているわけで
必ず検証環境などでの商用類似レコードに対し、しっかりと動作確認を行うべきである

また、

check.sql
SELECT COUNT(*) FROM テーブル名 WHERE パッチ対象条件
SELECT COUNT(*) FROM テーブル名 WHERE updated_time > '作業開始時間'

上記二つのカウント結果を取得することで、UPDATE件数が正常であることが確認できる

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up