通过存储过程批量修改表结构

-- mysql 存储过程 CONCAT 字符串拼接https://www.cnblogs.com/dragon-L/p/5016977.html
-- Mysql存储过程(四)——异常处理https://www.cnblogs.com/kungfupanda/p/5858562.html
-- mysql存储过程之异常处理篇https://www.iteye.com/blog/wwty-698239
-- 执行过程
-- 1、先执行删除存储过程 2、修改store_volume_xx,xx的年份 3、再执行创建存储过程 4、执行调用存储过程。

-- 删除存储过程
drop PROCEDURE if EXISTS batchAddStoreVolumeCityColum;
-- 创建存储过程
create PROCEDURE batchAddStoreVolumeCityColum()
BEGIN

     /* START Declare Conditions */  
  
    DECLARE key_exists CONDITION FOR 1091;  
        DECLARE Table_doesnot_exist CONDITION FOR 1146;  
  
    /* END Declare Conditions */  
    DECLARE i int DEFAULT 1;
    DECLARE tableName VARCHAR(50) DEFAULT "store_volume_2022";
    
    
    /* START Declare Exception Handlers */  
  
    DECLARE CONTINUE HANDLER FOR key_exists  
    BEGIN  
--         nothing do 
    END;  
        DECLARE CONTINUE HANDLER FOR Table_doesnot_exist  
    BEGIN  
--         nothing do 
    END; 
        
 /* END Declare Exception Handlers */ 
 
 /* START Execution */ 
--     select i ;
    WHILE i<=12 DO
    
        
        #先删除字段,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头)
        set @altersql = CONCAT("ALTER table ",tableName,LPAD(i,2,'0')," DROP COLUMN `city`");
        select  @altersql;
        prepare stmt from @altersql; #预处理需要执行的动态SQL,其中stmt是一个变量
        EXECUTE stmt;      #执行SQL语句
    deallocate prepare stmt;    #释放掉预处理段
        
        
        
        #重新添加字段,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头)
        set @altersql = CONCAT("ALTER table ",tableName,LPAD(i,2,'0')," ADD COLUMN `city` varchar(255) NULL COMMENT '归属地市' AFTER `modified_by`");
        prepare stmt from @altersql; #预处理需要执行的动态SQL,其中stmt是一个变量
        EXECUTE stmt;      #执行SQL语句
    deallocate prepare stmt;    #释放掉预处理段
        set i = i + 1;
    END WHILE;
    /* END Execution */ 
END;
-- 调用存储过程
call batchAddStoreVolumeCityColum();

你可能感兴趣的:(数据库存储,数据库开发)