2011-09-20 632 views
11

Estoy tratando de crear una tabla con un nombre basado en el año y el mes actual (2011-09), pero a MySQL no parece gustarle esto.mysql (5.1)> crear tabla con el nombre de una variable

SET @yyyy_mm=Year(NOW())+'-'+Month(NOW()); 
CREATE TABLE `survey`.`@yyyy_mm` LIKE `survey`.`interim`; 
SHOW TABLES IN `survey`; 

+-----------+ 
| interim | 
+-----------+ 
| @yyyy_mm | 
+-----------+ 

Si hago CREATE TABLE; sin las garrapatas alrededor @yyyy_mm, me sale un error de sintaxis genérica.

@yyyy_mm resuelve a 2020.

+0

Los identificadores no son variables. Las variables no son identificadores. Esto requiere el uso de "SQL dinámico", es asqueroso en todas las bases de datos con las que he trabajado. –

+0

Ver http://stackoverflow.com/questions/190776/how-to-have-dynamic-sql-in-mysql-stored-procedure y http://stackoverflow.com/questions/929244/mysql-create-table- with-dynamic-database-name y http://stackoverflow.com/questions/5530755/mysql-variables-storing-database-name –

Respuesta

24

Usted debe ser capaz de hacer algo como esto:

SET @yyyy_mm=DATE_FORMAT(now(),'%Y-%m'); 
SET @c = CONCAT('CREATE TABLE `survey`.`',@yyyy_mm, '` LIKE `survey`.`interim`'); 
PREPARE stmt from @c; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

nos & @nick: ¡dulce! ¡Gracias! – jacob

6
set @yyyy_mm=concat(year(now()),'-',month(now())); 
set @str = concat('create table survery.`', @yyyy_mm,'` like survey.interim;'); 
prepare stmt from @str; 
execute stmt; 
deallocate prepare stmt; 
Cuestiones relacionadas