本帖最后由 forimprove 于 2009-11-21 10:41:06 编辑

解决方案 »

  1.   

    MySQL中不支持表名为变量的动态直接用法,你需要通过prepare 预先准备SQL语句然后执行。
    mysql> DELIMITER $$
    mysql>
    mysql> DROP PROCEDURE IF EXISTS `CreateTempTable`$$
    Query OK, 0 rows affected (0.00 sec)mysql>
    mysql> CREATE PROCEDURE `CreateTempTable`(in paraName varchar(256))
        -> BEGIN
        ->  set @sql_CreateTempTable=concat('DROP TABLE IF EXISTS ',paraName);
        ->  PREPARE stmt1 FROM @sql_CreateTempTable;
        ->  EXECUTE stmt1 ;
        ->  DEALLOCATE PREPARE stmt1;
        ->
        ->  set @sql_CreateTempTable=concat('CREATE TABLE ',paraName, ' (',
        ->                    'Owner varchar(256) default \'\',',
        ->                    'CalleeNO varchar(256) default \'\',',
        ->                    'DateTime datetime default NULL',
        ->                  ') ENGINE=MyISAM DEFAULT CHARSET=utf8'
        ->          );
        ->  PREPARE stmt1 FROM @sql_CreateTempTable;
        ->  EXECUTE stmt1 ;
        ->  DEALLOCATE PREPARE stmt1;
        ->
        ->   END$$
    Query OK, 0 rows affected (0.00 sec)mysql>
    mysql> DELIMITER ;
    mysql> call CreateTempTable('t_forimprove');
    Query OK, 0 rows affected (0.06 sec)mysql> desc t_forimprove;
    +----------+--------------+------+-----+---------+-------+
    | Field    | Type         | Null | Key | Default | Extra |
    +----------+--------------+------+-----+---------+-------+
    | Owner    | varchar(256) | YES  |     |         |       |
    | CalleeNO | varchar(256) | YES  |     |         |       |
    | DateTime | datetime     | YES  |     | NULL    |       |
    +----------+--------------+------+-----+---------+-------+
    3 rows in set (0.06 sec)mysql>
      

  2.   

    DELIMITER $$DROP PROCEDURE IF EXISTS `CreateTempTable`$$CREATE PROCEDURE `CreateTempTable`(in paraName varchar(256))
    BEGIN
    set @sql_CreateTempTable=concat('DROP TABLE IF EXISTS ',paraName);
    PREPARE stmt1 FROM @sql_CreateTempTable;
    EXECUTE stmt1 ;
    DEALLOCATE PREPARE stmt1;

    set @sql_CreateTempTable=concat('CREATE TABLE ',paraName, ' (',
      'Owner varchar(256) default \'\',',
      'CalleeNO varchar(256) default \'\',',
      'DateTime datetime default NULL',
    ') ENGINE=MyISAM DEFAULT CHARSET=utf8'
    );
    PREPARE stmt1 FROM @sql_CreateTempTable;
    EXECUTE stmt1 ;
    DEALLOCATE PREPARE stmt1;  END$$DELIMITER ;