修改表字段可重复执行脚本

MySql

暂时只能新增,如果要删除和修改的功能再修改或者重新仿照写一个存储过程
-- 如果存在就删除存储过程
DROP PROCEDURE IF EXISTS Pro_ColumnWork;
-- 创建存储过程
DELIMITER $$
-- 1表示新增列
-- 2表示修改列类型  暂未实现
-- 3表示删除列     暂未实现
CREATE PROCEDURE Pro_ColumnWork(TableName VARCHAR(50),ColumnName VARCHAR(50),SqlStr VARCHAR(4000),CType INT)
BEGIN
    DECLARE Rows1 INT;
    SET Rows1=0;
    -- 判断是否已经存在该字段
    SELECT COUNT(*) INTO Rows1  FROM INFORMATION_SCHEMA.Columns
    WHERE table_schema= DATABASE() AND table_name=TableName AND column_name=ColumnName;
	-- 如果不存在该字段则新增列
    IF (CType=1 AND Rows1<=0) THEN
        SET SqlStr := CONCAT( 'ALTER TABLE ',TableName,' ADD COLUMN ',ColumnName,' ',SqlStr);
    ELSE  SET SqlStr :='';
    END IF;
-- 执行新增字段命令
    IF (SqlStr<>'') THEN
        SET @SQL1 = SqlStr;
        PREPARE stmt1 FROM @SQL1;
        EXECUTE stmt1;
    END IF;
END $$
DELIMITER ;

-- 执行存储过程
CALL Pro_ColumnWork ('表名','字段名','字段类型', 1);
-- 例子
CALL Pro_ColumnWork ('T_USER','NAME','varchar(80)', 1);

-- 添加注释
alter table 表名 MODIFY 字段名 字段类型 comment '注释';
-- 例子
alter table T_USER MODIFY NAME varchar(80) comment '姓名';

Oracle

CREATE OR REPLACE PROCEDURE Pro_ColumnWork
(
    TBNAME IN VARCHAR,
    COLNAME IN VARCHAR,
    COLTYPE IN VARCHAR
)
AS
    COLEXIST NUMBER(4);
BEGIN
    --判断列是否存在
    SELECT COUNT(1) INTO COLEXIST FROM cols
    WHERE TABLE_NAME=UPPER(TBNAME) AND COLUMN_NAME=UPPER(COLNAME);
	-- 如果不存在该字段则新增列
    IF COLEXIST = 0 THEN
        EXECUTE IMMEDIATE
                'ALTER TABLE '||TBNAME||' ADD '||COLNAME||' '||COLTYPE;
    END IF;
    COMMIT;
END;
/    
-- 执行存储过程
CALL Pro_ColumnWork('表名','字段名','字段类型');
-- 例子
CALL Pro_ColumnWork('T_USER','NAME','NVARCHAR2(80)');

-- 添加注释
COMMENT ON COLUMN 表名.字段名 IS '注释';
-- 例子
COMMENT ON COLUMN T_USER.NAME IS '姓名';

-- 执行完之后删除存储过程
DROP PROCEDURE Pro_ColumnWork;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值