我正在编写一个存储过程,其中我使用动态变量来定义SQL块。然后,我从动态变量创建一个准备好的语句并执行它。
当我的SQL超过255个字符时,它会被截断(可能是限制动态变量)。
set @NEW_CAMPAIGN_SQL = concat(
'CREATE TABLE `', CAMPAIGN_TABLE, '` (',
'`id` bigint(20) unsigned NOT NULL auto_increment,',
'`code` char(', _CODE_LEN, ') NOT NULL default \'\',',
'`status` tinyint(1) unsigned NOT NULL default 1,',
'PRIMARY KEY (`id`),',
'KEY `code_idx` (`code`),',
'KEY `status_idx` (`status`)',
') ENGINE=InnoDB DEFAULT CHARSET=latin1'
);
PREPARE NEW_CAMPAIGN_STMT FROM @NEW_CAMPAIGN_SQL;
EXECUTE NEW_CAMPAIGN_STMT;
Deallocate prepare NEW_CAMPAIGN_STMT;
我尝试将NEW_CAMPAIGN_SQL声明为非动态变量,但后来准备好的语句失败。
任何建议都将不胜感激。
答案 0 :(得分:0)
检查MySQL的Set Syntax。您不需要存储过程中的@
(您来自SQL Server吗?)。您还应该检查Declare for Local Variables,因为这可能会对您有所帮助。
答案 1 :(得分:0)
感谢您的帮助!