2009-03-31 42 views
18

Có cách nào trong MySQL để đặt tên của cơ sở dữ liệu vào một biến không? Ví dụ, khi tôi có một cơ sở dữ liệu được gọi là 'db1', tôi có thể làm một cái gì đó như thế này:tên cơ sở dữ liệu biến

set @db= 'db1'; 
select * from @db.mytable; 

EDIT: Có một ví dụ về những gì tôi muốn làm:

set @dbfrom= 'db1'; 
set @dbto= 'db2'; 
insert into @dbto.mytable (col1,col2,col3) select col2,col1,col3 from @dbfrom.mytable; 
+0

Bất kỳ ngôn ngữ lập trình hoặc môi trường cụ thể nào? Kết nối với cơ sở dữ liệu là nơi nó được chỉ định. –

+0

nó chỉ mysql .. Tôi sẽ đổ nó vào myadmin – grilix

+2

Bạn có thể sử dụng một tuyên bố sử dụng http://dev.mysql.com/doc/refman/5.0/en/use.html? –

Trả lời

19

Với đáng kể nỗ lực, vâng.

SET @db = 'db1'; 
SET @q = CONCAT('SELECT * FROM ', @db, '.mycol'); 
PREPARE stmt FROM @q; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

ya .. nó hoạt động, nhưng tôi có nhiều truy vấn lớn .. :( – grilix

+0

Xin lỗi, đó là tốt như nó được. – chaos

+0

Tôi có thể làm chèn với điều này không – grilix

1

Sử dụng Chaos' 'Prepare Statement' solution Tôi đã quản lý để tạo Thủ tục được lưu trữ sử dụng tên cơ sở dữ liệu biến.

Hoạt động như một nét duyên dáng để di chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác với Cơ sở lưu trữ. Bằng cách này, mã không được ghim vào một cơ sở dữ liệu duy nhất.

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `SampleProcedure` $$ 
CREATE PROCEDURE `SampleProcedure`(IN HubDatabaseName VARCHAR(255)) 
BEGIN 

SET @db = HubDatabaseName; 
SET @q = CONCAT(' 

/* Import data from Hub database to local database */ 
INSERT INTO `table_name_in_local_database` 
SELECT 
    * 
FROM 
    ', @db ,'.`tablename` 

'); 

PREPARE stmt FROM @q; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END $$ 
DELIMITER ; 
Các vấn đề liên quan