2022-11-23
SQL
0
请注意,本文编写于 117 天前,最后修改于 116 天前,其中某些信息可能已经过时。

在进行多租户项目的时候,每个客户都有一个独立的数据库,在每次调整完毕数据库结构后同步执行给相关租户的时候经常面临自动更新和表新增修改等操作

使用一下存储过程可以判断某个字段是否在数据库中已经存在


DROP PROCEDURE IF EXISTS Pro_Temp_ColumnWork;
DELIMITER $$
-- 1表示新增列,2表示修改列类型,3表示删除列
CREATE PROCEDURE Pro_Temp_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);
    -- 修改列类型
    ELSEIF (CType=2 AND Rows1>0)  THEN
    SET SqlStr := CONCAT('ALTER TABLE ',TableName,' MODIFY  ',ColumnName,' ',SqlStr);
    -- 删除列
    ELSEIF (CType=3 AND Rows1>0) THEN
    SET SqlStr := CONCAT('ALTER TABLE  ',TableName,' DROP COLUMN  ',ColumnName);
    ELSE  SET SqlStr :='';
    END IF;
    -- 执行命令
    IF (SqlStr<>'') THEN
    SET @SQL1 = SqlStr;
    PREPARE stmt1 FROM @SQL1;
    EXECUTE stmt1;
    END IF;
END $$
DELIMITER ;


call Pro_Temp_ColumnWork('sys_config','Name',CONCAT('varchar(500)  not null comment ''','名称'''),2)


本文作者:SnailBoy

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!