我正在尝试将列插入表中。诸如DROP COLUMN IF EXISTS
之类的任何东西都不起作用(删除和添加列均不起作用),显然是因为我的MySQ
L版本不支持此类if条件。我的问题是,是否可以基于CASE
语句在表中插入列?
我已经弄清楚如何确定一列是否存在,但是我正在根据这种情况努力插入一列。
我想工作的case statement
看起来像这样:
CASE WHEN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='PSIP-1.Standardproject_V2.5_notvalid'
AND TABLE_NAME='PS_Relevant Rail Stations$Loc'
AND COLUMN_NAME='triade')
IS NULL THEN
ALTER TABLE PS_Relevant Rail Stations$Loc
ADD COLUMN triade;
我也不确定将CASE statement
放在哪里,因为此代码本身无法运行。我需要以UPDATE PS_Relevant Rail Stations$Loc
开头,然后以CASE
继续吗?
您可以使用存储过程来实现此功能,该存储过程将数据库名称,表名称,列名称和列定义作为输入,如果指定表中不存在该列名称,则创建一个动态SQL语句来创建它。例如:
DELIMITER //
DROP PROCEDURE IF EXISTS add_column_if_not_exists //
CREATE PROCEDURE add_column_if_not_exists(IN dbname VARCHAR(50),
IN tblname VARCHAR(50),
IN colname VARCHAR(50),
IN coltype VARCHAR(50))
BEGIN
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=dbname
AND TABLE_NAME=tblname
AND COLUMN_NAME=colname) THEN
SET @sql = CONCAT('ALTER TABLE `', dbname, '`.`', tblname, '` ADD COLUMN `', colname, '` ', coltype);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END //
DELIMITER ;
然后您将像这样调用此过程(适当地修改列定义)
CALL add_column_if_not_exists('PSIP-1.Standardproject_V2.5_notvalid',
'PS_Relevant Rail Stations$Loc',
'triade',
'INT NOT NULL DEFAULT 0')