2013-02-21 51 views
0

我試圖重命名使用定義爲@var恆定的前綴表的列表:MySQL的原始查詢:使用@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 

這裏使用的正確方法/語法是什麼?

+0

什麼是errror消息? – Lars 2013-02-21 11:13:18

+0

其中:「您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第1行」select CONCAT(@p,'tablename1')'附近使用正確的語法「 – mikkelbreum 2013-02-21 11:15:45

回答

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; 
+0

謝謝,我需要什麼。 – mikkelbreum 2013-02-21 11:46:11