3

いくつかの異なるデータベース (すべて同じテーブルとフィールド名) で実行する必要がある長いスクリプトがあります。

私がやりたいことは次のようなものです:

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 構文にエラーがあります。'@SOURCE_DATABASE. tableFoo「行で...」

だから私はこれを10行目に挿入してみました:

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

...そして再びエラー「スクリプト行: 11 SQL 構文にエラーがあります。行の近くで '@TABLE' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください...」 できるようにほら、10行目は正常に動作します...

変数を使用してデータベース内のテーブルを参照する方法はありますか?

// ありがとうございました。

4

1 に答える 1

2

クエリ全体を連結すると機能します。試す:

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;
于 2011-04-03T17:05:19.903 に答える