表的列数是一个变量i,我是这样写的,但是发现不行...
DECLARE col_name VARCHAR(10);
WHILE i<service_type_count DO
  ##SET col_name=CONCAT('type',i);
  SELECT CONCAT('type',i) INTO col_name;
  ALTER TABLE this_month_day ADD COLUMN col_name INT;
  SET i=i+1;
END WHILE;
...报错提示已经存在同名的列,意思是说有两个名为“col_name”的列
mysql根本没把col_name当做变量,而是直接把col_name当做列名了
这个该怎么处理?

解决方案 »

  1.   

    ...
    DECLARE col_name VARCHAR(10);
    WHILE i<service_type_count DO
      ##SET col_name=CONCAT('type',i);
      SELECT CONCAT('type',i) INTO col_name;
      
      @sql = concat('ALTER TABLE this_month_day ADD COLUMN ',col_name,' INT');
      prepare stmt1 from @sql;
      EXECUTE stmt1 ;
      DEALLOCATE PREPARE stmt1;

      SET i=i+1;
    END WHILE;
    ...
      

  2.   

    要动态执行
    @asql = concat('ALTER TABLE this_month_day ADD COLUMN ',col_name,' INT');
    prepare stmt1 from @asql;
    EXECUTE stmt1 ;
    DEALLOCATE PREPARE stmt1;
      

  3.   

    楼上说得很明白了。必须使用预处理语句。
    http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#sqlps看看这个链接,说得比较详细。