2011-04-03 62 views
2

我有很長的腳本,我需要在幾個不同的數據庫上運行(所有witht他相同的表和字段名)。的MySQL變量存儲數據庫名稱

我想什麼做的是這樣的:

1 SET @TARGET_DATABASE = 'beta' 
2 SET @SOURCE_DATABASE = 'sandbox'; 
3 
4 CREATE DATABASE IF NOT EXISTS @TARGET_DATABASE; 
5 USE @TARGET_DATABASE; 

... 

10 INSERT INTO `tableFoo` SELECT * FROM @SOURCE_DATABASE.`tableFoo`; 

在第10行我得到一個錯誤(我並不感到驚訝):「腳本行:10您的SQL語法錯誤;檢查對應於您的MySQL服務器版本在線路附近使用「@SOURCE_DATABASE tableFoo。」正確的語法手冊...」

所以,我想這個insted的線路10:

10 SET @TABLE=CONCAT('`',@SOURCE_DATABASE,'`','.`tableFoo`'); 
11 INSERT INTO `tableFoo` SELECT * FROM @TABLE; 

...並再次出現錯誤「腳本行:11您的SQL語法錯誤;檢查對應於你的MySQL服務器版本在線路附近使用「@TABLE」正確的語法手冊......」正如你可以看到,10項線工程罰款...

有什麼辦法來指在一個數據庫中的表具有可變

//謝謝

回答

2

如果您Concat的整個查詢將工作嘗試:?。

set @db = 'mydb'; 
set @tble = 'table'; 

set @query = concat('INSERT INTO tablefoo SELECT * FROM ', @db, '.', @tble); 
PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

我沒有測試您的解決方案還沒有我繼續前進並按照我迄今爲止的方式解決它,當我測試它時,我會回來。 – 2011-12-09 00:13:28

相關問題