裏MySQL クエリー入門 (9) 基礎編7 動的クエリー
MySQLで動的クエリーを実行する為にプリペアド ステートメントを使います。
PREPAREでSQLを定義し、EXECUTEでPREPAREで定義したSQLを実行します。
PREPARE stmt_name FROM preparable_stmt EXECUTE stmt_name [USING @var_name [, @var_name] ...]
SET @tbl:='pref'; SET @pkey:=(SELECT COLUMN_NAME FROM information_schema.`COLUMNS` WHERE TABLE_NAME=@tbl AND COLUMN_KEY='PRI'); SET @updates:=(SELECT GROUP_CONCAT(CONCAT('\'',COLUMN_NAME,'=\\\'\',',COLUMN_NAME,',\'\\\'\',') SEPARATOR '\',\',') FROM information_schema.`COLUMNS` WHERE TABLE_NAME=@tbl AND COLUMN_KEY<>'PRI'); SET @sql:=CONCAT('SELECT CONCAT(\'UPDATE ',@tbl,' SET \',',@updates,'\' WHERE ',@pkey,'=\',',@pkey,',\'\\\'\') FROM ',@tbl); PREPARE update_backup FROM @sql; EXECUTE update_backup;
※ 7/9 実際に動くものに置き換え、日本語が文字化けたり、エスケープが完璧ではないので、後日改めて差し替えます。