2012-03-29 24 views
5

Tôi đang đặt một biến và sau đó tôi muốn sử dụng lệnh USE để thay đổi cơ sở dữ liệu. Thật không may USE không đánh giá biến.Cơ sở dữ liệu thay đổi MySQL với giá trị biến

SET @con="testDB"; 
Query OK, 0 rows affected (0.00 sec) 
select @con; 
+--------+ 
| @con | 
+--------+ 
| testDB | 
+--------+ 
1 row in set (0.00 sec) 
use @con; 
ERROR 1049 (42000): Unknown database '@con' 

Vì vậy, giá trị của biến không được đánh giá khi tôi cố kết nối. Bất kỳ ý tưởng?

+0

Tôi nghĩ rằng bạn muốn ": =" thay vì "=" khi sử dụng SET – keyser

+0

Đó là cùng nếu tôi sử dụng: = hoặc chỉ =, có nghĩa là sử dụng vẫn cố gắng để đánh giá chuỗi @con – bioShark

+0

Yup. Chỉ cần tìm thấy điều này: "Bạn cũng có thể gán giá trị cho biến người dùng trong các câu lệnh khác ngoài SET. Trong trường hợp này, toán tử gán phải là: = và không = vì sau này được coi là toán tử so sánh = trong câu lệnh không SET : ". Xin lỗi tôi không thể giúp đỡ. – keyser

Trả lời

5

Tôi đã tìm thấy giải pháp của riêng mình, vì vậy tôi sẽ trả lời câu hỏi của riêng tôi, trong trường hợp ai đó quan tâm.

@outis bạn nói đúng, không thể sử dụng biến với lệnh USE.

Tuy nhiên, do thực tế là tôi muốn tạo một bảng trong một cơ sở dữ liệu quy định tại thời gian chạy, giải pháp của tôi sẽ được sử dụng SQL động:

set @schema="testDB"; 
set @front="CREATE TABLE IF NOT EXISTS "; 
set @endpart=".`TEST1` (DIM_ID INT(16)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;"; 
set @stat=concat(@front,@schema,@endpart); 
prepare command from @stat; 
execute command; 

Vì vậy, về cơ bản giải pháp này được xây dựng lên các báo cáo, chuẩn bị và thực hiện nó. Tham số @schema thậm chí có thể được chuyển sang tập lệnh. Bằng cách này, tôi tự động xây dựng câu lệnh tạo.

+0

Hãy nhớ đánh dấu nó là được chấp nhận. – keyser

+0

Nó nói rằng tôi cần phải chờ đợi 2 ngày để chấp nhận nó ..... – bioShark

+0

Sẽ là tốt đẹp để 'deallocate chuẩn bị lệnh;' là tốt. – MyGGaN

0

Tôi không nghĩ rằng có thể USE @var; theo một cách nào đó. Nhưng trong một số trường hợp làm theo cách khác, xung quanh có thể là một lựa chọn.

USE testDB; 
SET @schema = DATABASE(); 
Các vấn đề liên quan