mysql 在存储过程中用当前日期作为表名创建表

darrenking96 2009-05-06 10:55:49
如题 存储过程如下:

BEGIN

declare @sqlstr varchar(200);
declare @i varchar(20);
set @i=curdate();
set @sqlstr = 'CREATE TABLE TABLE_'+cast(@i as varchar);
exec(@sqlstr) ;

END$$

以上语句报错 请问如何解决
谢谢
...全文
365 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hehe4569 2010-03-09
  • 打赏
  • 举报
回复
mark ^^^^^^^^^^^^^^^
ACMAIN_CHM 2009-05-06
  • 打赏
  • 举报
回复

当然不行。你的命名规则还是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 prepared

mysql> 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>


darrenking96 2009-05-06
  • 打赏
  • 举报
回复


大侠 请问在你那里可以么?
我这里为什么还是不行呢
WWWWA 2009-05-06
  • 打赏
  • 举报
回复
cast(@i as char)
darrenking96 2009-05-06
  • 打赏
  • 举报
回复
啊哦 为什么还是报错呢
说是语法错误
我用的是sqlyog

DELIMITER $$

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 10

DELIMITER ;
WWWWA 2009-05-06
  • 打赏
  • 举报
回复
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;
darrenking96 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 WWWWA 的回复:]
set @i=curdate();
set @sqlstr=CONCAT('CREATE TABLE `TABLE_',cast(@i as char),'`(id int)');
select @sqlstr;
PREPARE DD FROM @sqlstr;
EXECUTE DD;
测试通过
[/Quote]

恩!你的存储过程也是正确的 !
真不好意思 刚结贴了 分没法给你了
不过 非常感谢你的热心解答!!!
WWWWA 2009-05-06
  • 打赏
  • 举报
回复
set @i=curdate();
set @sqlstr=CONCAT('CREATE TABLE `TABLE_',cast(@i as char),'`(id int)');
select @sqlstr;
PREPARE DD FROM @sqlstr;
EXECUTE DD;
测试通过
darrenking96 2009-05-06
  • 打赏
  • 举报
回复
感谢!
以前没用过mysql
要好好看看资料了

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧