开发一个补丁,需求如下:
1.在已运行的数据库中修改一个表,增加一个参数(填初始值);
2.这个参数在运行中被修改为其他值;
3.再次运行该补丁,要求不仅增加该参数,而且值必须是修改后的值。
我写的代码如下,但是不能解决3中的要求,请高手支招,谢谢DROP TABLE IF EXISTS tbl_FCCPUTHD_temp;
CREATE TABLE tbl_FCCPUTHD_temp (
    BT                                      INT UNSIGNED NOT NULL
   ,ACRTHD                                  INT UNSIGNED
   ,PRIMARY KEY (BT)
   ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 COLLATE=gb2312_bin;
insert into tbl_FCCPUTHD_temp select BT,ACRTHD  from tbl_FCCPUTHD;DROP TABLE IF EXISTS tbl_FCCPUTHD;
CREATE TABLE tbl_FCCPUTHD (
    BT                                      INT UNSIGNED NOT NULL
   ,ACRTHD                                  INT UNSIGNED
   ,BRDSW5                                  INT UNSIGNED default 16383
   ,PRIMARY KEY (BT)
   ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 COLLATE=gb2312_bin;insert into tbl_FCCPUTHD select * ,16383 from tbl_FCCPUTHD_temp;drop table tbl_FCCPUTHD_temp;

解决方案 »

  1.   


    1.修改前表tbl_FCCPUTHD,定义如下;
    DROP TABLE IF EXISTS tbl_FCCPUTHD; 
    CREATE TABLE tbl_FCCPUTHD ( 
        BT                                      INT UNSIGNED NOT NULL 
      ,ACRTHD                                  INT UNSIGNED 
      ,PRIMARY KEY (BT) 
      ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 COLLATE=gb2312_bin; 2.现在需要在补丁中对该表增加字段BRDSW5,默认填写值163833.补丁打上后,BRDSW5在后续的数据库运行中被修改成了100(系统正常修改)4.再运行补丁,要求tbl_FCCPUTHD中新增字段BRDSW5值是100.
    注意:补丁会在系统运行中执行多次,除了第一次新增的参数值是默认值外,其他的情况都必须是运行补丁前该字段的实际值。
      

  2.   

    迷糊,这句怎么理解?是不是这个补丁还干别的事?如果tbl_FCCPUTHD有BRDSW5列就不用给该表增加该列,也不用修改该列的值;如果没有BRDSW5列,则增加该列,且默认值为16383。是这个意思吗?
      

  3.   

    你这个 tbl_FCCPUTHD 中到底有几行记录?如果是多行,则所有记录中 BRDSW5 的值 都被用户改成了 100 还是每个记录不同?
    建议你能举例说明,而不是这样仅用文字描述。否则时间都会花在这种问来问去上。(不问的话更惨,一但做出来不是你要的,反而浪费大家时间)