2012-04-11 111 views
2

我們有相當多的數據庫,我們正在試圖運行升級所有這些腳本給他們帶來最新的 - 正因爲如此,他們都有不同的列和表。SQL添加新列忽略重複

我們要添加新的表和列,如果他們arent已經存在,所以例如

CREATE TABLE IF NOT EXISTS `orders` (`id` INT (11) NOT NULL , 
    `value` VARCHAR (50) , `designId` INT (11) , PRIMARY KEY (`id`)); 

這樣的作品,但我們正在尋找相同類型的列的解決方案。我們當前的解決方案會拋出錯誤代碼:1060 - 重複的列名稱。

ALTER TABLE `orders` ADD COLUMN `customer` INT (1) NULL; 

我試着從garry passarella以下,但我得到一個錯誤,聲稱不正確的SQL語法:

IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'orders' AND COLUMN_NAME = 'customer') 
    BEGIN ALTER TABLE orders 
    ADD customer BIT DEFAULT NULL 
END 

如果有什麼我們可以用它來獲取每行忽略重複,或獲取整個腳本忽略錯誤代碼1060,這將不勝感激。

回答

3

if ... begin ... end是SQL Server語法。對於MySQL,它更像if ... then ... end if

if not exists (select * from information_schema.columns 
    where column_name = 'customer' and table_name = 'orders') then 
    alter table orders add customer int(1) null; 
end if 

在回答您的評論:在MySQL中,你不能在命令行中鍵入compound statements。他們必須在功能或存儲過程中。例如:

drop procedure if exists sp_addcolumn; 

delimiter // 
create procedure sp_addcolumn() 
begin 
    if not exists (select * from INFORMATION_SCHEMA.COLUMNS 
     where table_name = 'orders' and column_name = 'customer') then 
    alter table `orders` add column `customer` int(1) null; 
    end if; 
end// 

delimiter ; 
call sp_addcolumn; 

有一個open request on the MySQL bug tracker允許存儲程序之外if語句。目前的狀態是需要分類。

+0

我試過了,但它仍然拋出一個無效的語法錯誤: 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的正確語法手冊「IF NOT EXISTS(SELECT * FROM information_schema.columns在列名=‘CUS’在行1 – Toby 2012-04-11 13:05:52