0

@var として定義された定数プレフィックスを使用して、テーブルのリストの名前を変更しようとしています。

SET @p='newprefix_';
RENAME TABLE `oldprefix_tablename1` TO CONCAT(@p, 'tablename1');
RENAME TABLE `oldprefix_tablename2` TO CONCAT(@p, 'tablename2');

この構文は間違っていますが、次のことがわかります。

SELECT  CONCAT(@p, 'tablename'); //outputs newprefix_tablename

ここで使用する正しい方法/構文は何ですか?

4

1 に答える 1

2

あなたがしようとしている方法で直接行うことはできません。マニュアルにあるように ( http://dev.mysql.com/doc/refman/5.1/en/user-variables.html )

ユーザー変数は、データ値を提供することを目的としています。テーブル名やデータベース名が必要なコンテキストなどで、識別子または識別子の一部として SQL ステートメントで直接使用したり、SELECT などの予約語として使用したりすることはできません。

準備済みステートメントを使用する必要があります。

SET @p = 'newprefix_';
SET @s = CONCAT('RENAME TABLE `oldprefix_tablename1` to ', @p, 'tablename1');
PREPARE stmt FROM @s;
EXECUTE stmt;
于 2013-02-21T11:20:07.950 に答える