如题  存储过程如下:BEGIN declare @sqlstr varchar(200); 
declare @i varchar(20); 
set @i=curdate(); 
set @sqlstr = 'CREATE TABLE TABLE_'+cast(@i as varchar); 
exec(@sqlstr) ; END$$ 以上语句报错  请问如何解决
谢谢

解决方案 »

  1.   

    declare @sqlstr varchar(200);
    declare @i varchar(20);
    set @i=curdate(); 
    set @sqlstr = CONCAT('CREATE TABLE TABLE_',cast(@i as varchar)); 
    PREPARE DD FROM @sqlstr;
    EXECUTE DD;
      

  2.   

    啊哦 为什么还是报错呢
    说是语法错误
    我用的是sqlyogDELIMITER $$CREATE
        /*[DEFINER = { user | CURRENT_USER }]*/
        PROCEDURE `monitor`.`123`()
        /*LANGUAGE SQL
        | [NOT] DETERMINISTIC
        | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
        | SQL SECURITY { DEFINER | INVOKER }
        | COMMENT 'string'*/
        BEGIN declare @sqlstr varchar(200); 
    declare @i varchar(20); 
    set @i=curdate(); 
    set @sqlstr = CONCAT('CREATE TABLE TABLE_',cast(@i as varchar)); 
    PREPARE DD FROM @sqlstr; 
    EXECUTE DD;    END$$****************************
    错误码: 1064
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@sqlstr varchar(200); 
    declare @i varchar(20); 
    set @i=curdate(); 
    set @sqlst' at line 10DELIMITER ;
      

  3.   

    当然不行。你的命名规则还是SQL SERVE的,到MySQL的存储过程中当然报错。在存储过程中比较复杂,直接SQL语句是可以如下。mysql> set @sqlstr = concat('create table TABLE_',date_format(curdate(),'%Y%m%d'),' (id int)');
    Query OK, 0 rows affected (0.00 sec)mysql> PREPARE stmt1 FROM @sqlstr ;
    Query OK, 0 rows affected (0.00 sec)
    Statement preparedmysql> EXECUTE stmt1 ;
    Query OK, 0 rows affected (0.08 sec)mysql> show tables like 'table_%';
    +--------------------------+
    | Tables_in_test (table_%) |
    +--------------------------+
    | table_20090506           |
    +--------------------------+
    3 rows in set (0.00 sec)mysql>
      

  4.   

    感谢!
    以前没用过mysql
    要好好看看资料了
      

  5.   

    set @i=curdate();
    set @sqlstr=CONCAT('CREATE TABLE `TABLE_',cast(@i as char),'`(id int)'); 
    select @sqlstr;
    PREPARE DD FROM @sqlstr;
    EXECUTE DD;
    测试通过