如果不存在则添加列

时间:2011-04-27 10:07:20

标签: mysql mysql-error-1064

如果不存在,我该如何添加列? 我试过这段代码:

IF EXISTS( SELECT NULL
            FROM INFORMATION_SCHEMA.COLUMNS
           WHERE table_name = 'forwind.measuringdata_fino_10_00000000'
             AND table_schema = 'forwind'
             AND column_name != 'F1_USA(40)_u')  THEN

  ALTER TABLE `forwind.measuringdata_fino_10_00000000` ADD `F1_USA(40)_u` FLOAT NOT NULL default '0';

END IF; 

但是我收到以下错误:

  

错误代码:1064您输入了错误   你的SQL语法;检查手册   对应于您的MySQL服务器   用于正确语法的版本   'IF EXISTS附近(SELECT NULL               来自INFORMATION_SCHEMA.COLUMNS

如果有人知道其他解决方案,那对我有好处!

2 个答案:

答案 0 :(得分:7)

MySQL不支持这样的匿名IF语句。

您至少有3个选项可以解决此问题:

1)只需运行ALTER TABLE语句,如果列已存在,则忽略Duplicate column name错误。如果您在脚本中执行一堆DDL,则可以使用mysql -f忽略错误并继续运行。 2)使用脚本语言(如bash,python,perl等)检查列是否存在,然后添加它(如果它尚不存在)。 3)在MySQL中创建一个存储过程以检查列是否存在,然后添加它(如果它尚不存在)。

P.S。顺便说一句,我建议不要在括号中添加括号,因为这会强制您在每次引用时引用列名。

答案 1 :(得分:0)

------Add an IpAddress column in ActionsTracking table if -----

DECLARE @tableName varchar(MAX) ='ActionsTracking'
DECLARE @columnName varchar(MAX) ='IpAddress'

IF EXISTS(SELECT 1 FROM sys.columns
         WHERE Name = @columnName
         AND Object_ID = Object_ID(@tableName))
   PRINT 'Column Already Exists'
ELSE
BEGIN
EXEC('ALTER TABLE '+@tableName+'
       ADD '+ @columnName +' varchar(15) null')
   PRINT 'Column Added Sucessfully'
END