2013-10-31 47 views
3

我需要創建一個表,如果它不存在,並且如果表已經存在,則添加缺少的列。創建表如果不存在,插入列如果丟失,最好的方法

我知道如何做很多的查詢,如果語句等,但我在這裏問的是最好的解決方案是什麼..也許有一個特殊的查詢來做到這一點,或一個智能辦法。

我會做這種方式:

  • 創建表,如果不存在(所有列,因爲他們應該)

  • 比較所有列(如果有的缺少它們將被添加,否則不)

這是最好的方法還是有更好的方法來做到這一點?


附加信息

的colums需要在正確的位置以復加。我有一個字符串列表,表示按正確順序排列的所有列。使用vb.net我正在遍歷這些字符串。

+0

你有你需要保留的數據?如果沒有,請刪除所有內容然後添加它。 –

+0

是的,我確實有數據.. – sharkyenergy

回答

4

例如,退房this。它基本上是關於查詢數據字典和添加,只有當他們不存在的列:

IF NOT EXISTS(SELECT NULL 
       FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE table_name = 'tablename' 
       AND table_schema = 'db_name' 
       AND column_name = 'columnname') THEN 

    ALTER TABLE `TableName` ADD `ColumnName` int(1) NOT NULL default '0'; 

END IF; 

把它在一個過程使得它非常方便。

p.s.注意到有關列的位置:從the docs

要在特定位置的錶行內添加一列,先用 或AFTER COL_NAME。默認是最後添加列。您也可以在CHANGE或MODIFY操作中使用FIRST和AFTER 以重新排列表格中的列 。

+0

謝謝!這是否也將該列添加到正確的位置?我的意思是,我有一個表示vb.net中列的字符串列表,並且需要按照相同的順序添加它們。所以它可能是在表中間的一列失蹤.. – sharkyenergy

+1

讓我這樣說吧:它可以! ;)如果你按照列的順序調用你的AddCol(...)過程,那麼就是「是」。但是,如果您需要在兩者之間插入一列,則必須使用'AFTER'添加位置。檢查文檔的詳細信息:http://dev.mysql.com/doc/refman/5.1/en/alter-table.html – Trinimon

+0

謝謝!這工作! – sharkyenergy

-1

您可以使用下面的代碼爲:

if not exists(select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'table_name' and COLUMN_NAME = 'column_name') 

BEGIN 
    ALTER TABLE table_name ADD 
    ToUser uniqueidentifier NULL 

END 
相關問題